用于更新数据库或插入新行的脚本

时间:2012-09-30 19:15:14

标签: php mysql

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

1 个答案:

答案 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,有些东西不起作用”更有用和有用。