php - PHP + MySQL:如何知道 UPDATE 查询何时与 WHERE 语句不匹配?
问题描述
当我执行 UPDATE 查询时,我希望能够知道该操作是否:
- 已成功执行并更改了值
- 已成功执行,但值与 DB 中的值相同
- 未成功 执行
所以,假设我在 DB 中只有一行,它有列id=1和my_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),但我无法区分查询1和3(两个$stmt->affected_rows
值均为 0)。
有没有办法在不使用WHERE id = '<my-id>'
语句执行 SELECT 查询的情况下知道这一点?
解决方案
这是一个技巧:
SET @i = 0;
UPDATE goals SET my_value = 'xyz', id = id+(@i:=@i+1)-@i WHERE id = '1';
运行后@i
,无论 UPDATE 是否更改了值,都会增加匹配行的数量。
诀窍是加减 的值@i
,这将是 0 的净变化。
推荐阅读
- oracle - Oracle SQL*Loader WHEN 子句引发错误 2
- python - 如何使用熊猫数据框中的列表?
- postgresql - 如何在 Terraform 上使用 CRD 创建 crunchydata postgres 集群?
- r - 贝叶斯元分析和异质性中的森林图
- mongodb - Unifi Controller 在 Centos7 上停止
- python - Pytest 不接受以 ../../ 开头的参数
- sockets - Google PUB/SUB 通过 C 套接字连接发布消息
- autodesk-forge - 在 Forge Viewer 中查看 Recap Pro 项目
- html - 用css设置div的显示
- c# - 不能被索引两次。请检查包含/排除模式是否会为主文件和测试文件生成不相交的集合