PHP,PDO bindValue - 如何传递逗号分隔的INT以与'in子句'一起使用

时间:2016-01-27 16:57:46

标签: php mysql data-binding pdo

我正在尝试使用类似于此的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)

我再次只看到三行中的一行。我觉得这必须有一个非常基本的解决方案,但我找不到它..

1 个答案:

答案 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],
]);