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

Я использую 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] 

Solutions Collecting From Web of "MySQL PDO, как связать параметры для IN ()"

Я понял:

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