我有一个INSERT .. ON DUPLICATE KEY,它不会更新,而是插入一个新行。我有一个2个唯一的键,但它只是插入新的行。 我已尝试在多行上使用唯一键来查看是否存在问题,但仍然遇到同样的问题。
所以我想知道会使用UPDATE表SET ...更合适,还是应该坚持使用INSERT .. ON DUPLICATE。
我有一个产品表,我希望我的管理员能够随时更改/更新。目前我有一个INSERT .. ON DUPLICATE但它给了我无穷无尽的问题。
我在主键上都有一个唯一的键(我知道它不需要,仅用于测试目的)和餐馆名称,因为逻辑上我认为如果仅在餐馆名称上有一个唯一的键不起作用。也许通过使餐馆ID和餐馆名称成为唯一键,该功能将更新行而不插入新的。但仍然没有用,这是我最后的手段,因为我无法弄清楚这个问题。
更新
只有在我更改餐馆名称时才会插入新行,如果我更改了表格更新的其他内容。
if (isset($_POST['Save-dets'])) {
$r_id = mysqli_real_escape_string($dbc, $_POST['Resturant_ID']);
$r_name = mysqli_real_escape_string($dbc, $_POST['rest_name']);
$r_desc = mysqli_real_escape_string($dbc, $_POST['Desc']);
$insert_rest = "INSERT INTO Rest_Details
( Resturant_ID
, Resturant_name
, Resturant_des)
VALUES
( ?
, ?
, ?
)
ON DUPLICATE KEY
UPDATE Resturant_ID = ?
, Resturant_name = ?
, Resturant_des = ?";
$run_query = $dbc->prepare($insert_rest);
$run_query->bind_param($c, 'ssssss', $r_id, $r_name, $r_desc,$r_id, $r_name, $r_desc );
if (!$run_query->execute($run_query))
if ($execute) {
echo "<script> alert('Addrrss Saved')</script>";
} else {
echo mysqli_error($dbc);
}
}
CREATE TABLE `Rest_Details` (
`Resturant_ID` bigint(255) NOT NULL AUTO_INCREMENT,
`Resturant_name` varchar(100) NOT NULL,
`Resturant_des` varchar(200) NOT NULL,
PRIMARY KEY (`Resturant_ID`),
UNIQUE KEY `Resturant_ID` (`Resturant_ID`,`Resturant_name`),
) ENGINE=InnoDB AUTO_INCREMENT=243 DEFAULT CHARSET=utf8
您对此事的意见非常有帮助。
答案 0 :(得分:0)
请在
查看您的使用情况$run_query->bind_param($c, 'ssssss', $r_id, $r_name, $r_desc,$r_id, $r_name, $r_desc );
您正在将面向对象的样式参数与功能样式参数混合使用 - 请参阅http://php.net/manual/en/mysqli-stmt.bind-param.php
基于at文档,它可能是
$run_query->bind_param('ssssss', $r_id, $r_name, $r_desc,$r_id, $r_name, $r_desc );
或
mysqli_stmt_bind_param($c, 'ssssss', $r_id, $r_name, $r_desc,$r_id, $r_name, $r_desc );