MySQL PDO, как связать параметры для IN ()

0

Я использую PHP, MySQL и PDO.

$ids = '1,2,3';

У меня есть такой запрос, который работает:

SELECT *
FROM table
WHERE id IN($ids)

Это возвращает 3 строки, как ожидалось

Если я использую:

SELECT *
FROM table 
WHERE id IN(:ids)

$stmt = $this->db->prepare($q);
$params = array('ids' => $ids);
$stmt->execute($params);

Он возвращает только 1 строку.

Как я могу привязать идентификаторы?

Согласно https://phpdelusions.net/pdo, я должен использовать:

$arr = [1,2,3];
$in  = str_repeat('?,', count($arr) - 1) . '?';
$sql = "SELECT * FROM table WHERE column IN ($in)";

но как я могу поместить свои идентификаторы 1,2,3, которые хранятся в $ ids в $ arr = [1,2,3], потому что если я напишу

 $arr = [$ids] 

он в основном пишет

 $arr = ['1,2,3']

вместо

$arr = [1,2,3]
Теги:
pdo

1 ответ

1

Я понял:

$ids = '1,2,3';

Разверните строку $ ids в массив:

$ids_array = explode(',', $ids);

Это дает:

$ids_array[] = 1;
$ids_array[] = 2;
$ids_array[] = 3;

Создайте строку вопросительных знаков с разделителями-запятыми. Количество вопросительных знаков соответствует количеству значений массива

$in  = str_repeat('?,', count($ids_array) - 1) . '?';

Это создает строку, которая выглядит так:

?,?,?

Поместите эту строку в sql

$q = "SELECT *
    FROM table
    WHERE id IN($in) ";


$stmt = $this->db->prepare($q);

Выполните запрос, передав массив как параметр

$stmt->execute($ids_array);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню