@thisuserhatephp
Офлайн - losers Онлайн - lusers

Как использовать IN в PDO?

Есть массив который мы получаем GET запросом
$id = $_GET['id'];
$id = implode(',', $id);
// 5,9,11


Далее делаем подготовленный запрос
pdo
$get_product = $dbpdo->prepare("SELECT * FROM user_control 
LEFT JOIN stock_filter ON stock_filter.filter_id IN (:id)
INNER JOIN stock_list ON stock_list.stock_id = stock_filter.stock_id
GROUP BY stock_list.stock_id  DESC 
");

$get_product->bindParam('id', $id);
$get_product->execute();

Если сделать так, то выводит только 1 строку с id 5 а остальные нет.

Но если сделать так, то все выводит как нужно
$id

$get_product = $dbpdo->prepare("SELECT * FROM user_control 
LEFT JOIN stock_filter ON stock_filter.filter_id IN ($id)
INNER JOIN stock_list ON stock_list.stock_id = stock_filter.stock_id
GROUP BY stock_list.stock_id  DESC 
");
$get_product->execute();


Думаю bindValue экранирует символы.

Каким образом я могу сделать запрос с помощью bindValue, возможно ли это сделать или придется по "старинке" ?
  • Вопрос задан
  • 58 просмотров
Решения вопроса 1
alexey-m-ukolov
@alexey-m-ukolov Куратор тега MySQL
Если бы вбили свой вопрос в поисковик, то увидели бы древнее (и единственно верное в данных условиях) решение - плейсхолдеров должно быть столько же, сколько значений и биндить нужно каждое значение отдельно, а не конкатенированную строку. Ну и в данном случае проще использовать не именованные параметры, а индексные, тогда можно сделать так:
$placeholders = substr(str_repeat('?,', count($ids)), 0, -1);
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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