首页 > 解决方案 > PHP + MySQL:如何知道 UPDATE 查询何时与 WHERE 语句不匹配?

问题描述

当我执行 UPDATE 查询时,我希望能够知道该操作是否:

所以,假设我在 DB 中只有一行,它有列id=1my_value="abc"并且我执行以下查询:

1) UPDATE goals SET my_value = 'xyz' WHERE id = '9' (it would fail on where)
2) UPDATE goals SET my_value = 'xyz' WHERE id = '1' (it will go fine)
3) UPDATE goals SET my_value = 'abc' WHERE id = '1' (it is exactly the same as the already stored column)

使用$stmt->affected_rows我可以区分查询2和其他查询($stmt->affected_rows值为 1),但我无法区分查询13(两个$stmt->affected_rows值均为 0)。

有没有办法在不使用WHERE id = '<my-id>'语句执行 SELECT 查询的情况下知道这一点?

标签: phpmysqlmysqli

解决方案


这是一个技巧:

SET @i = 0;
UPDATE goals SET my_value = 'xyz', id = id+(@i:=@i+1)-@i WHERE id = '1';

运行后@i,无论 UPDATE 是否更改了值,都会增加匹配行的数量。

诀窍是加减 的值@i,这将是 0 的净变化。


推荐阅读