成功区分'no rows were affected'和行 UPDATEd - 到相同的值(MySQL 和 PHP)



我正在从PHP执行SQL(MySQL)命令。每次执行都有几种可能的结果:

  1. 记录更新为新值
  2. 记录已更新,但值恰好相同
  3. 记录找不到要更新的行(即,没有与WHERE子句匹配的行)

我想知道如何区分#的1和3:这两种情况都会返回零作为受影响的行数,所以:

$result = $db->exec($statement)

在这两种情况下都将具有CCD_ 2。我该如何区分?

编辑:我想问如何区分场景二和场景三,而不是场景一和场景三!很抱歉给您带来不便。。。

一个简单的解决方案是两个查询。

首先,运行SELECT查询,使用mysqli_num_rows()检查行是否存在。

然后,如果行存在,则可以运行UPDATE查询并使用mysqli_affected_rows()。


[EDIT]

我会为任何想打一个电话的人提出一个潜在的替代方案。我不知道你是否有兴趣做任何INSERT,或者纯粹的更新。以下是一些值得思考的内容:

来自顶部评论@http://php.net/manual/en/mysqli.affected-rows.php:

在"INSERT INTO On DUPLICATE KEY UPDATE"查询中,尽管在成功的查询中,人们可能期望affected_rows每行只返回0或1,但实际上它可能返回2。

根据Mysql手册:"使用ON DUPLICATE KEY UPDATE,如果将行作为新行插入,则每行受影响的行值为1,如果更新了现有行,则为2。">

请参阅:http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

以下是每行的汇总细分

+0:没有更新或插入行(可能是因为该行已经存在,但在UPDATE期间没有实际更改字段值)

+1:插入了一行

+2:更新了一行

你能使它符合你的需要吗?

相关内容

  • 没有找到相关文章

最新更新