MYSQL - ON DUPLICATE KEY 不更新
MYSQL - ON DUPLICATE KEY does not update
我一直在更新和插入数据库方面运气不佳。我的数据库插入工作完美,我只是无法更新。
我已经厌倦了两个单独的查询,一个用于更新另一个插入,但更新永远不起作用。我现在正在使用 ON DUPLICATE KEY 触发器,并且信息再次只是每次添加一条记录而不是更新。我哪里错了?我已经为此工作了一天半,但似乎无济于事。新手问题!
<?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>
Customer_id 和 Cus-_email 字段都在 bd 上设置为唯一,但是,记录不断插入到数据库中。任何帮助将不胜感激。
显示创建
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
你需要改变
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);
我一直在更新和插入数据库方面运气不佳。我的数据库插入工作完美,我只是无法更新。
我已经厌倦了两个单独的查询,一个用于更新另一个插入,但更新永远不起作用。我现在正在使用 ON DUPLICATE KEY 触发器,并且信息再次只是每次添加一条记录而不是更新。我哪里错了?我已经为此工作了一天半,但似乎无济于事。新手问题!
<?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>
Customer_id 和 Cus-_email 字段都在 bd 上设置为唯一,但是,记录不断插入到数据库中。任何帮助将不胜感激。
显示创建
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
你需要改变
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);