0

人们

我正在尝试使用相同的脚本来批准将联系人添加到数据库中,但如果主键 (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 并选择检查现有密钥?

4

1 回答 1

0

语法错误

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());
}

比“哎呀,有些东西不起作用”更有用和更有帮助。

于 2012-09-30T19:20:13.540 回答