【发布时间】:2014-06-23 16:41:28
【问题描述】:
我有一个复选框列表,这些复选框被赋值为 1 或 0,它们都被传递到 $_POST 变量中。
我当前的 sql 语句正确插入了所有这些,但是当我更改值并再次运行 sql 语句时,它会更新所有项目的“updated_at”列。
有没有办法只更新更改的值,这样它就不会更新每个条目的“updated_at”列? id 是我的主键,site_id 是唯一的。
SQL 语句:
$sql = "INSERT INTO admin_sites2 (site_id,created_at,active)
VALUES ('$key',now(),'$value')
ON DUPLICATE KEY
UPDATE active = $value,
updated_at = now()
";
【问题讨论】:
-
id 必须是查询的一部分。但你没有。我假设只是一个小小的疏忽。修复它,你应该会没事的。
-
@hakre:我不确定我是否理解您的评论。看起来
site_id是该表上的唯一键;必须至少有一个唯一约束才能引发“重复键”异常;而且我们不想更新那个唯一键的值。 -
@spencer7593:我假设主键 - 不是唯一键 - 需要
INSERT INTO ... ON DUPLICATE KEY UPDATE工作。我可能错了,但我可以想象这是问题的一部分,并且可以作为快速解决方案。 -
@hakre:可以为任何唯一约束引发“重复键”异常,无论是主键还是唯一键。 (一个表可以有多个唯一约束;在“重复键”异常中标识的任何一个键都是 UPDATE 操作用来标识行的键值。
标签: php mysql sql-update insert-update