【问题标题】:How to identify if on update query executed with no changes如何识别是否在没有更改的情况下执行更新查询
【发布时间】:2017-01-05 11:51:59
【问题描述】:

也许标题不是很清楚,但假设这种情况: 我有一个表格来更新表格的特定行。当我提交表单时,会执行 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){

【问题讨论】:

  • 您应该检查错误条件以查看查询是否成功。您应该检查受影响的行数以了解实际更改了多少行。
  • @GordonLinoff 实际上这就是我所做的。我检查有多少受影响的行(参见代码)。但是如果所有数据都没有改变,我会得到 0 行(但查询实际上没有失败也没有触发任何错误)。向比我更熟练的人寻求一些明智的建议:)

标签: mysql


【解决方案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);
}

【讨论】:

  • 谢谢!我试图理解 Gordon 想要告诉我的内容,所以感谢你们俩的宝贵帮助!
猜你喜欢
  • 2017-04-13
  • 1970-01-01
  • 1970-01-01
  • 2019-08-28
  • 2021-11-22
  • 2012-11-24
  • 1970-01-01
  • 1970-01-01
  • 2021-06-19
相关资源
最近更新 更多