У меня есть INSERT .. ON DUPLICATE KEY, который просто не обновляется, вместо этого вставляет новую строку. У меня есть 2 уникальных ключа, но все же это просто вставка новых строк. Я пробовал уникальные ключи на нескольких строках, чтобы увидеть, была ли эта проблема, но все еще получала ту же проблему.INSERT ... ON DUPLICATE KEY или UPDATE ... SET
Так что мне было интересно использовать UPDATE table SET ... быть более подходящим или я должен придерживаться INSERT .. ON DUPLICATE.
У меня есть таблица продуктов, в которой я хочу, чтобы мои администраторы могли изменять/обновлять, когда захотят. На данный момент у меня есть INSERT .. ON DUPLICATE, но это дает мне бесконечные проблемы.
У меня есть уникальный ключ как для первичного ключа (я знаю, что он не нужен, только для целей тестирования), так и название ресторана, поскольку логически я думал, что если уникальный ключ в названии ресторана не работает. Возможно, сделав идентификатор ресторана и название ресторана уникальным ключом, функция будет обновлять строку, а не вставлять новую. Но все еще не работает, это мое последнее средство, поскольку я не могу понять проблему.
UPDATE
Новая строка только вставляется, если я изменить название ресторана, если я ничего менять обновление таблицы.
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
Ваше мнение по этому вопросу было бы очень полезно.
Какова ценность '$ r_id'? –
@JonStirling ресторан id. В этом конкретном ресторане 3 – user6362696
Хорошо, неважно, измените ли вы линию привязки, чтобы использовать 'ississ' вместо' ssssss'? И вы должны удалить «Resturant_ID =?», Поскольку он избыточен. –