MySQL PDO如何为IN()绑定参数

时间:2017-12-25 02:10:21

标签: php mysql pdo

我使用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行。

如何绑定ID?

根据https://phpdelusions.net/pdo,我应该使用:

$arr = [1,2,3];
$in  = str_repeat('?,', count($arr) - 1) . '?';
$sql = "SELECT * FROM table WHERE column IN ($in)";

但是如何将存储在$ ids中的1,2,3的id放入$ arr = [1,2,3],因为如果我写的话

 $arr = [$ids] 

它基本上是在写

 $arr = ['1,2,3']

而不是

$arr = [1,2,3]

1 个答案:

答案 0 :(得分:1)

我明白了:

$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);