2017-08-31 6 views
0

この質問は尋ねられたかもしれないが、私がここで見つけた解決策を試してみたところ、私にとってはうまくいかなかった。電子メール列が存在する場合はデータベース内のデータを更新する必要があります。新しいレコードを挿入しない場合はデータを更新する必要があります。 以下は私のコードです。重複キーの更新構文でもデータが複製される

 <?php 

    $dbhost = 'localhost'; 
    $dbuser = 'root'; 
    $dbpass = ''; 
    $db = 'mbf'; 

    $dbconn = mysql_connect($dbhost, $dbuser, $dbpass); 
    mysql_select_db($db); 



    $dat = date("Y-m-d H:i:s"); 
    $date = new DateTime(); 
    $date->modify('+4 weeks'); 


    if(isset($_POST['submit'])) { 

    $email = $_POST['email']; 

      $dat = $_POST['date']; 
      $ghdate = $_POST['ghdate']; 
      $amount = $_POST['amount']; 
      $iniamount = $_POST['iniamount']; 
      $outamount = $_POST['outamount']; 
     $ghamount = $_POST['ghamount']; 




     $query = "INSERT INTO donation (email, date, ghdate, amount, 
    inamount, outamount, ghamount) VALUES ('$email', '$dat', 
    '$ghdate','$amount', 
'$iniamount', '$outamount', '$ghamount') 
     ON DUPLICATE KEY UPDATE 
email='$email', date='$dat', amount='$amount', inamount='$iniamount', 
outamount='$outamount', ghamount='$ghamount'"; 


if(mysql_query($query)) 
{ 
echo "<script>alert('Donation of $amount was successful');</script>"; 
} 
else 
{ 
echo "<script>alert('FAILED TO INSERT');</script>"; 
} 

} 


?> 

電子メール列を更新するのではなく、新しいレコードを挿入します。

+1

電子メール列は一意の(または主キー)として定義されていますか? – Mureinik

答えて

2

ON DUPLICATE KEY UPDATEステートメントは、フィールド値がUNIQUE/PRIMARY KEY制約に違反する場合にのみ機能します。電子メールフィールドにテーブルスキーマのUNIQUE制約が設定されていることを確認してください。

関連する問題