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

Differentiate between 'no rows were affected' and rows succesfully UPDATEd--to same value (MySQL and PHP)

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

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

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

$result = $db->exec($statement)
在这两种情况下,

都会有 $result == 0。如何区分?

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

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

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

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


[编辑]

...我会为寻求单一呼叫的任何人建议一个潜在的替代方案。我不知道您是否有兴趣进行任何插入或纯粹的更新。以下是一些值得深思的内容:

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

在 "INSERT INTO ON DUPLICATE KEY UPDATE" 查询中,虽然人们可能期望 affected_rows 到 return 在成功查询中每行只有 0 或 1,但实际上可能 return 2.

来自 Mysql 手册:"With ON DUPLICATE KEY UPDATE, the affected-rows value per row is 1 if the row is inserted as a new row and 2 if an existing row is updated."

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

这是每行的总和细分

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

+1: 插入一行

+2: 更新了一行

你能做出适合你需要的那个吗?