2011-12-29 21 views
0

次のコードで問題が発生していますが、正常に動作しているようですが、問題が発生するたびに新しいレコードが更新されます1。私はそれがレコードがうまく更新主キーの自動増分を切ったが、その後、新しいものを作成しません、それは、1つまたは他のいずれかと思われる場合:-S重複キー更新で新しいレコードを作成する

<?php 
$query = mysql_query(" 
    INSERT INTO hqfjt_chronoforms_data_emailform 
    (cf_id,cf_uid,emailformname,datesent) 
    VALUES 
    ('$_POST[cf_id]','$_POST[cf_uid]','$_POST[emailformname]','$_POST[datesent]') 
    ON DUPLICATE KEY UPDATE 
    datesent='$_POST[datesent]'; 
") or die(mysql_error()); 
?> 
+1

あなたのスキーマを投稿してください。 –

+2

データベースの「一意の」または「主キー」フィールドは何ですか? – cheeken

+0

** $ _ POST [datesent] ** ** $ _ POST ['datesent'] **のようなものではありませんか? –

答えて

2

あなたはすでにクエリ文字列をエコーし​​ようとしましたか?その内部の変数置換が間違っていると推測します。デバッグのためにそのようなものを試してください:

<?php 
$sql = "INSERT INTO hqfjt_chronoforms_data_emailform 
    (cf_id,cf_uid,emailformname,datesent) 
    VALUES 
    ('{$_POST['cf_id']}','{$_POST['cf_uid']}','{$_POST['emailformname']}','{$_POST['datesent']}') 
    ON DUPLICATE KEY UPDATE 
    datesent='{$_POST['datesent']}'"; 
echo $sql; // for debugging 
$query = mysql_query($sql) or die(mysql_error()); 
?> 

上記の修正された変数名に注意してください。 (その中括弧、配列インデックスの引用符)

+0

デバッグは次の通りです>> –

+0

INSERT INTO hqfjt_chronoforms_data_emailform(cf_id、cf_uid、emailformname、datesents)VALUES( ''、 '8d50cf1becab8c90ec0e387a746da8c3'、 'メリークリスマス'、'30-12-2011 ')重複キー更新日: 30-12-2011 ' –

+1

あなたはそれを持っています:ポストvar 'cf_id'は空です。 POSTの反対側に投稿されていない理由を確認してください。 auto_incrementフィールドがINSERTされた空またはNULLの場合は、新しい自動インクリメント値が代わりに使用されます。 – Kaii

0

私はそれがだと想像することはできません問題はありますが、IDをintにキャストして引用符を除外しても同じことが起こりますか?

<?php 
$query = mysql_query(" 
    INSERT INTO hqfjt_chronoforms_data_emailform 
    (cf_id,cf_uid,emailformname,datesent) 
    VALUES 
    (" . (int) $_POST['cf_id'] . ",'$_POST[cf_uid]','$_POST[emailformname]','$_POST[datesent]') 
    ON DUPLICATE KEY UPDATE 
    datesent='$_POST[datesent]'; 
") or die(mysql_error()); 
?> 

はところで、あなたは本当に準備された文(PDOまたはmysqliの)を使用し、より良いまだ mysql_real_escape_stringたりせずに、あなたのクエリであなたの $_POST変数を使用しないでください。

+0

これは何の違いもないようですが、それはまだ別のcf_id、 POSTのアドバイスをいただきありがとうございます。私はデバッグのためにできることをすべて削除しましたが、何が原因で起こったのかわかりませんでした。 –

関連する問題