«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как устранить неверный порядок параметров в обновлениях базы данных подготовленных операторов PHP?

Как устранить неверный порядок параметров в обновлениях базы данных подготовленных операторов PHP?

Опубликовано 8 ноября 2024 г.
Просматривать:949

How to Resolve Incorrect Parameter Order in PHP Prepared Statement Database Updates?

Подготовленный оператор PHP для обновлений базы данных

Это обсуждение посвящено правильному использованию подготовленных операторов в PHP для предотвращения уязвимостей, таких как SQL-инъекции. Целью рассматриваемого блока кода является обновление таблицы базы данных одним полем с использованием подготовленного оператора.

В предоставленном коде метод update() в файле class.Scripts.inc использует подготовленный оператор. оператор в попытке обновить таблицу дампа данных. Однако выполнение не удалось из-за неправильного порядка параметров в методеbind_param(). Текущий код связывает параметры в порядке $id и $content, в то время как оператор SQL ожидает их в обратном порядке, что приводит к неправильной идентификации записи и затрагиванию нулевых строк.

Исправленный код ниже исправляет это ошибка путем привязки параметров в правильном порядке и предоставления дополнительной обработки ошибок:

$stmt = $this->mysqli->prepare("UPDATE datadump SET content=? WHERE id=?");
/* Always check whether the prepare() succeeded */
if ($stmt === false) {
    trigger_error($this->mysqli->error, E_USER_ERROR);
    return;
}

$id = 1;
/* Bind our params */
/* Bind variables in the same order as SQL params */
$stmt->bind_param('si', $content, $id);

/* Set our params */
/* No escaping needed when using prepared statements */
$content = $_POST['content'] ?: '';

/* Execute the prepared Statement */
$status = $stmt->execute();
/* Always check whether the execute() succeeded */
if ($status === false) {
    trigger_error($stmt->error, E_USER_ERROR);
}

printf("%d Row inserted.\n", $stmt->affected_rows);

Что касается ваших конкретных запросов:

  1. Ваше сообщение «Вставлено 0 строк» ​​уже на подходе. в обратном порядке параметров. Параметры id и содержимого были связаны в неправильном порядке, в результате чего предложение WHERE не соответствовало ни одной строке.
  2. При обновлении таблицы допустимо изменять только те поля, которые вам нужны. Остальные столбцы таблицы останутся без изменений.
Заявление о выпуске Эта статья перепечатана по адресу: 1729512196. В случае каких-либо нарушений, пожалуйста, свяжитесь с [email protected], чтобы удалить ее.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3