我正在从PHP执行SQL(MySQL)命令。每次执行都有几种可能的结果:
- 记录更新为新值
- 记录已更新,但值恰好相同
- 记录找不到要更新的行(即,没有与
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:更新了一行
你能使它符合你的需要吗?