人
我正在尝试使用相同的脚本来批准要添加到数据库的联系人,但如果主键(id)已经存在,查询将进行更新。所以我设置了一个INSERT INTO .... ON DUPLICATE KEY UPDATE查询,如下所示:
$resultsc = mysql_query("INSERT INTO $contact (id,First,Last,Companyid,userid,Title,PrimaryPhone,SecondaryPhone,PrimaryEmail,SecondayEmail,inserted) VALUES('$id','$first','$last','$companyid','$userid','$title','$phone1','$phone2','$email1','$email2',NOW()) ON DUPLICATE KEY UPDATE (First,Last,Companyid,userid,Title,PrimaryPhone,SecondaryPhone,PrimaryEmail,SecondayEmail) VALUES ('$first','$last','$companyid','$userid','$title','$phone1','$phone2','$email1','$email2') WHERE id='$id'");
if(!$resultsc)
{
echo "<font face='Verdana' size='2' ><center>You have successfully approved this user for access to this site.</center><br><center><input type='button' value='Back' onClick='history.go(-2)'></center>"; die();
}
else
{
echo "<font face='Verdana' size='2' ><center>You have not updated this contact for this site.</center><br><center><input type='button' value='Back' onClick='history.go(-2)'></center>";
}
我没有收到任何错误,但数据库没有更新或插入新记录。所以我检查了我的“$ contacts”变量以确保它指向正确的表,它就是。如果我只是单独插入,那么脚本工作正常。但是当我这样做时,查询没有任何反应。我想知道它有什么问题,或者我应该选择if / else来检查现有密钥?
答案 0 :(得分:0)
语法为wrong。
INSERT ... ON DUPLICATE KEY UPDATE
field1=VALUES(field1),
field2=field2+1,
field3='fixevalue',
field4=VALUES(field4)
etc...
请注意使用values()
功能。它在这些on dupe
查询中非常方便,因此您不必插入字段的值两次(一次插入插入部分,一次插入更新部分)。 MySQL将在更新中再次使用插入部分中的值。如果您插入“大”数据并且不想在重复数据上浪费带宽,则非常方便。
在元级别上,不要像在调试阶段那样输出固定的错误消息:
if (!$resultc) {
die(mysql_error());
}
比“oops,有些东西不起作用”更有用和有用。