Я использую 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]
Я понял:
$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);