PDO с, “ГДЕ … В” запросах

Я переделываю некоторый код PHP для использования PDO для доступа к базе данных, но я сталкиваюсь с проблемой с "ГДЕ... В" Запросе.

Я пытаюсь удалить некоторые вещи из базы данных, на основе которой проверяются объекты на форме. Длина и содержание списка будут варьироваться, но для этого примера, предполагать, что это - это:

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

Затем запрос похож на это:

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

Когда я делаю это, только первый идентификатор удален. (Я предполагаю, что это выводит запятую и все после него.)

Я также попытался делать $idlist массив, но затем это ничего не удаляет.

То, что надлежащий путь состоит в том, чтобы использовать список объектов в PDO, подготовило оператор?

20
задан PhoneixS 7 September 2017 в 08:30
поделиться

2 ответа

Поскольку вы не можете смешивать значения (числа) и логику потока управления (запятые) с помощью подготовленных операторов, вам понадобится по одному заполнителю на каждое значение.

$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)");

и цикл для связывания параметров.

31
ответ дан 30 November 2019 в 00:27
поделиться

Я бы сделал $idlist массивом, затем просто прошелся бы по массиву с помощью foreach, чтобы удалить конкретный элемент.

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

$stmt = $dbh->prepare("DELETE FROM `foo` WHERE `id` = ?");
$stmt->bindParam(1, $id);

foreach ($idlist as $item){
    $id = $item;
    $stmt->execute();
}
-3
ответ дан 30 November 2019 в 00:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: