MYSQL - ON DUPLICATE KEY不更新

时间:2016-03-24 03:36:11

标签: php mysql insert-update insert-into on-duplicate-key

我在更新和插入数据库方面遇到了最糟糕的运气。我插入数据库工作得很好,我无法更新。

我已经厌倦了两个单独的查询,用于更新另一个插入,但更新永远不会有效。我现在使用ON DUPLICATE KEY触发器,再次信息只是每次添加一条记录而不是更新。我哪里错了?我现在已经在这一天工作了一天半,似乎无处可去。 newbee问题!

  <?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>

在bd上将Customer_id和Cus-_email字段都设置为唯一,但是,记录会继续插入到数据库中。任何帮助将不胜感激。

SHOW CREATE

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 个答案:

答案 0 :(得分:2)

您需要更改

UNIQUE KEY CustomerID_2 (CustomerID, Cus_Email)

为:

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);