mysql — PHP, PDO bindValue — как передать INT через запятую для использования с ‘в предложении’

Я пытаюсь заставить запрос MySQL, подобный этому, работать с использованием PHP и PDO.

select user_id from  users where user_id in (7,8,9)

Если я сделаю это:

$userlist ='7,8,9';
$stmt->bindValue(':userlist', $userlist, PDO::PARAM_STR);

Записи журнала сервера MySQL:

2016-01-27T16:51:52.644453Z   32 Prepare    select user_id from  users where user_id in (?)
2016-01-27T16:51:52.644489Z   32 Execute    select user_id from  users where user_id in ('7,8,9')

И только строка, где user_id равен 7, возвращается.

Если я сделаю это:

$userlist ='7,8,9';
$stmt->bindValue(':userlist', (int)$userlist, PDO::PARAM_INT);

MySQL регистрирует это:

2016-01-27T16:54:09.110990Z   33 Prepare    select user_id from  users where user_id in (?)
2016-01-27T16:54:09.111026Z   33 Execute    select user_id from  users where user_id in (7)

И снова я вижу только один из трех рядов. Я чувствую, что это должно быть очень простое решение, но я не смог его найти ..

2

Решение

Вы должны связать каждое значение

select user_id from  users where user_id in (:id1,:id2,:id3)

Для этого запроса:

$stmt->bindValue(':id1', 7);
$stmt->bindValue(':id2', 8);
$stmt->bindValue(':id3', 9);

Или вы можете использовать какой-то построитель запросов. Например, что вы можете сделать с Построитель запросов Yii2:

// ...WHERE (`status` = 10) AND (`type` IS NULL) AND (`id` IN (4, 8, 15))
$query->where([
'status' => 10,
'type' => null,
'id' => [4, 8, 15],
]);
0

Другие решения

Других решений пока нет …