如果不存在则插入或如果存在则更新PHP



如果表中不是具有值的同一行,我想插入,但如果有具有相同值的行,我只想更新一个将向当前值添加+1的行。我有当前的代码,但它似乎并没有更新行中存在的值。

INSERT INTO raport(id, wykonawca, tytul, czas_trwania, powtorzenia) 
VALUES('','$wykonawca2','$tytul2','$czas_trwania2', '$powtorzenia2') 
ON DUPLICATE KEY UPDATE wykonawca='$wykonawca2', tytul='$tytul2', czas_trwania='$czas_trwania2', 
powtorzenia='$powtorzenia2'+1

确保表中有一列声明为UNIQUE或PRIMARY KEY,而不是自动递增列

如果指定ON DUPLICATE KEY UPDATE子句,并且要插入的行会导致UNIQUE索引或PRIMARY KEY中的值重复,则会发生旧行的UPDATE。例如,如果列a被声明为UNIQUE并包含值1,则以下两个语句具有类似的效果:

INSERT INTO t1 (a,b,c) VALUES (1,2,3)
ON DUPLICATE KEY UPDATE c=c+1;
UPDATE t1 SET c=c+1 WHERE a=1;

(对于a是自动增量列的InnoDB表,效果不相同。对于自动增量列,INSERT语句会增加自动增量值,但UPDATE不会。(

MySQL参考

编辑:您的id列为空,您需要传递一个值

关于行为什么不更新的最初问题的实际答案是因为您没有传递PRIMARY KEY的值——这是您的AUTO-INCREMENTid列。

每次通过:

VALUES('','$wykonawca2','$tytul2','$czas_trwania2', '$powtorzenia2') 

这意味着您的id列是空的,因此没有重复,只有一个新行。如果你想拥有ON DUPLICATE KEY UPDATE,你需要输入id。

有关处理多个索引和DUPLICATE UPDATE的方法的更多信息,请查看此问题:多个UNIQUE字段的ON DUPLICATE KEY UPDATE的MySQL行为

此外,你应该阅读并尽快采取行动,你不应该直接将变量传递到sql中——这非常过时,也非常不安全:

准备好的语句如何防止SQL注入攻击?

相关内容

最新更新