首页 > 解决方案 > PHP Prepared Statement插入或更新如果行存在

问题描述

我一直在为下面的代码寻找修复程序。我在 stackoverflow 中搜索了许多类似的帖子,但没有得到解决。

我要确定的是,我想检查一个查询,如果存在行,我需要使用 UPDATE 语句,否则使用 INSERT 语句。我已经建立了很多次,但没有准备好的声明。现在我正在使用准备好的语句修改我以前的许多代码。下面是我的代码。

<?php

include'../db.php';

$exercise_days=$_POST['edays'];
$id=$_POST['id'];

if ($exercise_days!='' && is_numeric($exercise_days)) 
{
    $query=$db->prepare("SELECT * from exercisetable where id=?");
    $query->bind_param('s', $id);
    /* execute query */
    $query->execute();
    /* store result */
    $query->store_result();
    $query->bind_result($rowcheck);
    $query->fetch();
    if ($rowcheck)
    {
        $e_update=$db1->prepare("UPDATE exercisetable SET exercise_days=? WHERE id=?");
        $e_update->bind_param('ss', $exercise_days, $id);
        $e_update->execute();
        if($e_update){
        $message='Exercise Days Updated';
        $success='Success';
        echo json_encode(array('message'=>$message,'success'=>$success));
        }
        $e_update->close();

    } else {
        $e_insert=$db1->prepare("INSERT INTO exercisetable (`id`, `exercise_days`) VALUES (?,?)");
        $e_insert->bind_param('ss', $id, $exercise_days);
        $e_insert->execute();
        if($e_insert){
        $message='Exercise Days Inserted';
        $success='Success';
        echo json_encode(array('message'=>$message,'success'=>$success));
        }
        $e_insert->close();

    }
}

else  
{
    $message='Exercise Days Can Only Be Numbers';
    $success='Error';
    echo json_encode(array('message'=>$message,'success'=>$success));
} 
 ?>

执行上面的代码总是进入 else 语句,即使行存在,它也会进入 INSERT。我想要的是如果行存在则更新,否则插入。任何帮助表示赞赏。

标签: phpprepared-statement

解决方案


感谢@RamRaider 的提示和建议。如果有人需要即时参考,我将发布对我有用的解决方案。

在更改我的原始 PHP 代码之前对 MySql 列进行的一些编辑是我将我的列更改为 UNIQUE。

<?php

include'../db.php';

$exercise_days=$_POST['exercise_days'];
$id=$_POST['id'];

if ($exercise_days!='' && is_numeric($exercise_days))  
{
        $query=$db->prepare("INSERT INTO exercisetable (`id`, `exercise_days`) VALUES (?,?) ON DUPLICATE KEY UPDATE exercise_days =?");
        $query->bind_param('sss', $id, $exercise_days, $exercise_days);
        $query->execute();
        if($query){
        $message='Exercise Days Inserted';
        $success='Success';
        echo json_encode(array('message'=>$message,'success'=>$success));
        }
        $query->close();
}

else
{
    $message='Excercise Days Can Only Be Numbers';
    $success='Error';
    echo json_encode(array('message'=>$message,'success'=>$success));
} 
 ?>

推荐阅读