2016-03-24 15 views
-1

私はデータベースに更新して挿入するのが最悪です。私のデータベースへの挿入は完全に機能し、私は更新できません。MYSQL - 重複キーでは更新されません

私は別の挿入を更新するために2つの別々のクエリを疲れましたが、更新はうまくいきません。私は現在ON DUPLICATE KEYトリガーを使用していますが、情報は更新する代わりに毎回レコードを追加します。どこが間違っていますか?私は1日半の間これをやっていて、どこにも出てこないようです。新生児の問題! CUSTOMER_IDとCusの-_emailフィールドのは、BDに独特のように設定されている両方

<?php 
    $Cust_ID = $_SESSION["CustomerID"]; 
    if (isset($_POST['Update'])) { 
     $c_fname = $_POST['fname']; 
     $c_lname = $_POST['lname']; 
     $c_email = $_POST['email']; 
     $c_phone = $_POST['phone']; 

    // Save $_POST to $_SESSION 
    //query 

    $insert_det = "INSERT INTO Cus_acc_details(CUS_Fname,CUS_Lname,Cus_Email,CUS_Phone) 
    VALUES (?,?,?,?) 
    ON DUPLICATE KEY 
    UPDATE 
    CUS_Fname = '$c_fname', 
    Cus_Lname = '$c_lname'"; 

$stmt = mysqli_prepare($dbc, $insert_det); 
//new 
// $stmt = mysqli_prepare($dbc, $insert_c); 
//debugging 
//$stmt = mysqli_prepare($dbc, $insert_c) or die(mysqli_error($dbc)); 

mysqli_stmt_bind_param($stmt, 'sssi', $c_fname, $c_lname, $c_email, $c_phone); 

/* execute query */ 
$r = mysqli_stmt_execute($stmt); 

// if inserted echo the following messges 
if ($r) { 
    echo "<script> alert('registration sucessful')</script>"; 
} 
} else { 
echo "<b>Oops! Your passwords do not </b>"; 
} 
?> 

HTML

<section class="container"> 
    <form id="myform " class="Form" method="post" action="Cus_Account.php?c_id=<?php echo $c_id ?>" accept-charset="utf-8"> 

     <!--     <div id="first">--> 
     <input type="text" id="fname" name="fname" value="<?php echo $_SESSION['fname']; ?>" required> 
     <input type="text" id="lname" name="lname" value="<?php echo $_SESSION['lname']; ?>" required> 
     <input type="text" id="email" name="email" value="<?php echo $_SESSION['Cus_Email']; ?>" required> 
     <input type="number" id="phone" name="phone" value="<?php echo $_SESSION['phone']; ?>" required> 
     <input type="submit" name="Update" value="Update"> 
     <br> 
    </form> 

は、しかし、レコードはデシベルに挿入保ちます。どんな助けもありがとう。

SHOWは、あなたがに

UNIQUE KEY CustomerID_2 (CustomerID, Cus_Email) 

を変更する必要が

CREATE TABLE `Cus_acc_details` (
`CustomerID` tinyint(11) NOT NULL AUTO_INCREMENT, 
`AcctId` varchar(100) NOT NULL, 
`CUS_Fname` varchar(45) DEFAULT NULL, 
`Cus_Lname` varchar(45) DEFAULT NULL, 
`CUS_Phone` varchar(45) NOT NULL, 
`Cus_Email` varchar(200) NOT NULL, 
PRIMARY KEY (`CustomerID`), 
UNIQUE KEY `CustomerID` (`CustomerID`), 
UNIQUE KEY `CustomerID_2` (`CustomerID`,`Cus_Email`) 
) ENGINE=InnoDB AUTO_INCREMENT=24 DEFAULT CHARSET=outfit 
+1

あなたが質問に 'SHOW CREATE TABLE Cus_acc_details'出力を追加することはできますか? – Barmar

+0

'cus_email'上のユニークなインデックスはそれ自身であるのですか、'(customer_id、cus_email) 'のような複合インデックスですか?後者は 'cus_email'をユニークにするものではなく、IDと電子メールの組み合わせだけです。挿入された各行は異なるIDを取得するため、重複したキー条件は発生しません。 – Barmar

+0

@Barmarどうすればこの問題を回避できますか? FNAMEとして、LNAMEが一意 – jerneva

答えて

2

CREATE:

UNIQUE KEY Email (Cus_Email) 

をそれ以外の場合は、それが唯一の顧客IDとメール独特の組み合わせではなく、電子メールを作りますそれだけで、異なるIDを持つ電子メールを複製することができます。 INSERTにはIDが指定されていないため(自動的にAUTO_INCREMENTが追加されるため)、挿入されたデータに重複キーはありません。主キーは自動的に一意のキーであるため、

また、あなたは

UNIQUE KEY CustomerID (CustomerID) 

を必要としません。

だから次の操作を行います。

ALTER TABLE Cus_acc_details 
    DROP KEY CustomerID, 
    DROP KEY CustomerID_2, 
    ADD UNIQUE KEY Email (Cus_Email); 
+0

ありがとうございます。そんなに。私は私がとても近かったとは思えませんが、これまでのところ – jerneva

関連する問題