2012-09-30 145 views
0

人民腳本用於更新數據庫或插入新行

我試圖使用相同的腳本批准的聯繫人添加到數據庫中,但查詢會做一個更新,如果主鍵(id )已經在那裏。所以,我成立了一個INSERT INTO ....對重複密鑰更新查詢,這是下面:

$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

語法是wrong

INSERT ... ON DUPLICATE KEY UPDATE 
    field1=VALUES(field1), 
    field2=field2+1, 
    field3='fixevalue', 
    field4=VALUES(field4) 
    etc... 

請注意使用values()函數。它在這些查詢中非常方便,因此您不必在字段值中插入兩次(一次插入部分,一次插入更新部分)。 MySQL將在更新中再次使用插入部分中的值。如果您插入「大型」數據並且不希望浪費重複數據帶寬,則非常方便。

在一元層次,不輸出一個固定的錯誤消息,因爲你同時調試階段:

if (!$resultc) { 
    die(mysql_error()); 
} 

比「哎呀,事情沒有工作」更加有用和有益的。