Обработка запросов «WHERE... IN» с помощью PDO
При использовании PDO для доступа к базе данных управление запросами с помощью «WHERE...» Предложения IN» могут представлять собой проблему. Рассмотрим следующий сценарий: вам необходимо удалить записи из таблицы базы данных на основе списка проверенных элементов формы, представленного как «$idlist» с переменной длиной и содержимым (например, «260,201,221,216,217,169,210,212,213»).
Первоначально, использование запроса, подобного приведенному ниже, может показаться логическое:
$query = "DELETE from `foo` WHERE `id` IN (: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)");
Затем привяжите каждый идентификатор к соответствующему знаку вопроса:
for ($i = 0; $i bindParam($i 1, $idlist[$i]);
}
Этот метод гарантирует, что каждый элемент в списке правильно привязан к заполнителю, что позволяет запросу успешно удалить нужные записи.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3