Ваш SQL-запрос некорректен.Согласно быстрому тесту, который я выполнил на локальном экземпляре MySQL, условие WHERE id = ID
кажется всегда верным (вероятно, оно оценивается как 1=1
. Поэтому ваш запрос такой же, как UPDATE tbl_product SET name='$name' LIMIT 1
, и из-за этогоон обновляет все записи без LIMIT.
Кроме того, вы неправильно используете подготовленные операторы (что не является частью проблемы, но вы все равно должны делать это правильно).
$id = 1; // assign the id of the record you want to change
$name = "the new name";
$sql ="UPDATE tbl_product SET name = :name WHERE id = :id";
// Prepare statement
$stmt = $conn->prepare($sql);
// execute the query and bind values to placeholders in the query
$stmt->execute([
':name' => $name,
':id' => $id
]);
Таким образом, внедрение SQL невозможно, и вы правильно используете идентификатор в своем запросе и можете удалить часть LIMIT.
Изменить 1 (Перенаправление):
Перенаправлениеи отправка заголовков - это совсем другая тема. По сути, вы бы сделали это следующим образом (см. также this для получения более подробной информации):
header('Location: products.php');
exit;
Также вы не можете использовать echo
до header
. Это выдаст ошибку. См. здесь для получения дополнительной информации.
Редактировать 2 (Изменение случайных записей):
Изменение случайных записейкажется странным приложением, ноон, вероятно, будет работать с использованием этого запроса вместо этого:
UPDATE tbl_product SET name = :name ORDER BY RAND() LIMIT 1
Вам также необходимо удалить часть :id
из вызова $stmt->execute
, так как в вашем запросе больше нет параметра: id.