Подготовленный оператор 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);
Что касается ваших конкретных запросов:
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3