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ので、フィールドの値を 2 回 (挿入部分で 1 回、更新部分で 1 回) 挿入する必要がありません。MySQL は、更新時に挿入部分の値を単純に使用します。「大きな」データを挿入していて、重複データで帯域幅を浪費したくない場合に非常に便利です。

メタレベルでは、デバッグ フェーズのときのように、修正されたエラー メッセージを出力しないでください。

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

「おっと、何かがうまくいかなかった」よりもはるかに便利で役に立ちます。

于 2012-09-30T19:20:13.540 に答える