ILoveYAnny
@ILoveYAnny

Как используя PDO в NOT IN поместить массив или строку со списком?

Здравствуйте, у меня есть запрос
$sendQuery = "SELECT * FROM `table` WHERE `country` LIKE ?  AND `id` NOT IN (?)";

$country = "Russia";
$loaded = array("376",'1','2','3','103','104');  // Сюда я получаю массив, для наглядности написал этот.
$loaded = implode($loaded, "', '");

$params = array($country, $loaded);
$db->prepare($sendQuery);
$db->execute($params);


Получаю все записи, PDO игнорирует список игнорируемых ID.

Если же напрямую вставлять в запрос, то всё работает отлично.
$sendQuery = "SELECT * FROM `table` WHERE `country` LIKE ? AND `id` NOT IN ( '" . implode($loaded, "', '") . "' )";


Но в таком случае появляется уязвимость. Как можно поместить массив в параметр?
  • Вопрос задан
  • 205 просмотров
Решения вопроса 1
jasonOk
@jasonOk
Легче болтать, чем код писать
$qMarks = str_repeat('?,', count($ids) - 1) . '?';
$sth = $db->prepare("SELECT * FROM `table` WHERE `country` LIKE ?  AND `id` NOT IN ($qMarks)");
$sth->execute($ids); // не забыть сделать array_merge с $ids для параметра "LIKE ?"
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы