MySQL PDO如何为IN()[重复]绑定参数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL PDO如何为IN()[重复]绑定参数相关的知识,希望对你有一定的参考价值。
这个问题在这里已有答案:
$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]
答案
我想到了:
$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);
以上是关于MySQL PDO如何为IN()[重复]绑定参数的主要内容,如果未能解决你的问题,请参考以下文章