Я пытаюсь заставить запрос 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)
И снова я вижу только один из трех рядов. Я чувствую, что это должно быть очень простое решение, но я не смог его найти ..
Вы должны связать каждое значение
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],
]);
Других решений пока нет …