我正在尝试检查是否存在重复记录,然后插入或更新。我已将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行
答案 0 :(得分:1)
您可以使用UPDATE子句中的VALUES(col_name)函数来引用INSERT ... ON DUPLICATE KEY UPDATE语句的INSERT部分中的列值。
但是您没有提供列名,而是再次提供值。
因此,您要么再次提供列名称:
ON DUPLICATE KEY UPDATE dcsrep = values(dcsrep), ...
或者您跳过VALUES()
函数并提供值:
ON DUPLICATE KEY UPDATE dcsrep='$dcsrep', ...
注意:
当您只想更新电话号码时,没有理由更新所有列。如果所有其他字段仍然保持不变,只需更新包含电话号码的列。