区分 '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)条命令。每次执行有几种可能的结果:
- 记录已更新为新值
- 记录已更新,但值恰好相同
- 记录找不到要更新的行(即没有行匹配
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: 更新了一行
你能做出适合你需要的那个吗?
我正在执行来自 PHP 的 SQL(MySQL)条命令。每次执行有几种可能的结果:
- 记录已更新为新值
- 记录已更新,但值恰好相同
- 记录找不到要更新的行(即没有行匹配
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: 更新了一行
你能做出适合你需要的那个吗?