关于重复键错误

时间:2015-12-01 16:31:19

标签: php mysql

我正在尝试检查是否存在重复记录,然后插入或更新。我已将to_number字段(这是一个电话号码)设为UNIQUE字段。有一个PRIMARY KEY“id”是自动递增的。不确定这是否是导致头痛的原因。这是我的代码,然后是错误。

$sql = "INSERT INTO DC**** (id, dcsrep, name, to_number, amount, date, digits, details)
VALUES ('', '$dcsrep', '$name', '$to_number', '$amount', '$date', '$digits', '$details') 
ON DUPLICATE KEY UPDATE dcsrep = values($dcsrep), name = values($name), to_number = values($to_number), amount = values($amount), date = values($date), digits = values($digits), details = values($details)";
  

错误:INSERT INTO *** Auth(id,dcsrep,name,to_number,amount,date,digits,details)VALUES('','notreal@notreal.com','Test Johnson','+ 15555551212' ,'150.00','2015-12-16','1234','再次测试'。)ON DUPLICATE KEY UPDATE dcsrep = values(notreal@notreal.com),name = values(Test Johnson),to_number = values( +15555551212),金额=值(150.00),日期=值(2015-12-16),数字=值(1234),详细信息=值(再次测试。)   您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以便在'@ notreal.com'附近使用正确的语法,name = values(Test Johnson),to_number = values(+15555551212),'在第2行

1 个答案:

答案 0 :(得分:1)

来自documentation

  

您可以使用UPDATE子句中的VALUES(col_name)函数来引用INSERT ... ON DUPLICATE KEY UPDATE语句的INSERT部分中的列值。

但是您没有提供列名,而是再次提供值。

因此,您要么再次提供列名称:

ON DUPLICATE KEY UPDATE dcsrep = values(dcsrep), ...

或者您跳过VALUES()函数并提供值:

ON DUPLICATE KEY UPDATE dcsrep='$dcsrep', ...

注意:

当您只想更新电话号码时,没有理由更新所有列。如果所有其他字段仍然保持不变,只需更新包含电话号码的列。