如何识别更新查询是否在没有更改的情况下执行

时间:2017-01-05 11:51:59

标签: mysql

也许标题不是那么清楚,但假设这种情况: 我有一个表单来更新表的特定行。当我提交表单时,执行UPDATE查询。

我计算受影响行的数量,以确定查询是否正确。

$row->execute();
$count = $row->rowCount();
if($count==0){
    http_response_code(500);
}else{
    http_response_code(200);
}

如果用户通过更改任何数据提交表单,则此方法很有效。如果表单保持不变,查询将影响0结果,我的代码将返回500。 但关键是查询已正确执行。

所以我的问题是:有没有办法让mysql告诉我0行受影响因为数据没有改变而不是任何其他情况(例如字段中的错误值等等) ?)。所以我的if会变成这样的东西:

if($count==0||$no_field_changed==false){

1 个答案:

答案 0 :(得分:1)

Gordon已经在评论中给了你答案,

您应该检查错误条件以查看查询是否成功

但是为了明确我会为你扩展它。

$status = $row->execute();
if ( ! $status ) {
    // the query errored
    $arr = $row->errorInfo();
    error_log(print_r($arr,1), 3, 'db_error.log'));
    http_response_code(500);
    exit;
}

// So if we get here the query ran successfully
if($row->rowCount() == 0){
    // Nothing was changed by our query this time but it ran successfully
    http_response_code(200);
}else{
    // Something was changed by our query
    http_response_code(200);
}