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

Как выполнить запросы PDO с помощью «ГДЕ... В» с использованием заполнителей и параметров?

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

How to Execute PDO Queries with \

PDO-запросы с "WHERE... IN"

В попытке улучшить доступ к базе данных с помощью PDO многие разработчики сталкиваются с проблемами, особенно с "WHERE... IN» запросы. Давайте углубимся в тонкости и выясним правильный подход к использованию списка элементов в подготовленном операторе PDO.

Загадка «ГДЕ... В»

Рассмотрим сценарий, в котором вам нужно удалять элементы из базы данных на основе списка отмеченных элементов из формы. Каждый элемент имеет соответствующий идентификатор, который обычно хранится в массиве. Обычный запрос "WHERE... IN" будет выглядеть примерно так:

$query = "DELETE FROM `foo` WHERE `id` IN (:idlist)";
$st = $db->prepare($query);
$st->execute(array(':idlist' => $idlist));

Однако этот подход часто приводит к удалению только первого идентификатора. Это связано с тем, что PDO интерпретирует список, разделенный запятыми, как одно значение, следовательно, игнорируя последующие идентификаторы.

Использование заполнителей и параметров

Чтобы обойти эту проблему, необходимо использовать заполнители и параметры привязки. Этот подход предполагает замену всего списка, разделенного запятыми, отдельными заполнителями (вопросительными знаками) и циклическим перебором массива для привязки каждого идентификатора к заполнителю. Вот как этого можно добиться:

$idlist = array('260','201','221','216','217','169','210','212','213');

$questionmarks = str_repeat("?,", count($idlist)-1) . "?";

$stmt = $dbh->prepare("DELETE FROM `foo` WHERE `id` IN ($questionmarks)");

foreach ($idlist as $id) {
  $stmt->bindParam(1, $id);
}

Этот пересмотренный подход гарантирует, что каждый идентификатор рассматривается как отдельный параметр, что обеспечивает точное выполнение запроса.

Последний учебник Более>

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

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

Copyright© 2022 湘ICP备2022001581号-3