【发布时间】:2019-02-07 01:11:17
【问题描述】:
当我们使用 php 更新 MySQL 记录时,我们可以使用以下命令检查它是否生效:
$mysqli->affected_rows;
但是如何检查哪一列被修改了呢?
例如,在我的表中有以下列:id / name / age
在记录中,我们有数据:1 / Woton / 18
如果我发送:UPDATE mytable SET name = 'Woton', age = '20' WHERE id = '1'
只有 age 字段发生了变化。我如何确定这一点?
【问题讨论】:
-
没有内置功能来报告哪些列发生了变化。我们可以检查当前值并与触发器中新分配的值进行比较,但是我们需要某种机制来将该信息从触发器传递到调用者。这也不是内置功能,因此我们需要决定是使用用户定义的变量还是其他表。由于 UPDATE 语句会影响多行,因此我们需要决定如何报告多行的结果。
-
另外,
SET id = '1',和WHERE id = '1'也不会以您预期的方式工作。我认为id是primary auto-incremented key -
这个触发器,会是什么样子?我会在正确的数据库中配置它,但是如何让它响应 php 命令呢?这是重点
-
@WotonSampaio 您正在使用 PHP。只需选择更新前后的行并比较值即可。
-
@WotonSampaio 只需要 MySQL,请参阅上面斯宾塞的评论,这也让我难以理解。一个额外的查询真的没什么大不了的,除非您在单独的查询中更新数百行。但这里有另一个想法。重新评估是否有必要。有人更新了他们的信息,只需说“您的信息已成功更新”并留下它。无需说他们更新了什么。无论如何,他们应该已经知道了。也不要存储他们的“年龄”,存储他们的“出生日期”。
标签: php mysql mysqli sql-update