我正在尝试使用类似于此的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)
我再次只看到三行中的一行。我觉得这必须有一个非常基本的解决方案,但我找不到它..
答案 0 :(得分:0)
您必须绑定每个值
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's query builder:
执行的操作// ...WHERE (`status` = 10) AND (`type` IS NULL) AND (`id` IN (4, 8, 15))
$query->where([
'status' => 10,
'type' => null,
'id' => [4, 8, 15],
]);