我使用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]
答案 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);