MySQL PDO如何为IN()[重复]绑定参数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL PDO如何为IN()[重复]绑定参数相关的知识,希望对你有一定的参考价值。

这个问题在这里已有答案:

我正在使用phpmysql和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]
答案

我想到了:

$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()[重复]绑定参数的主要内容,如果未能解决你的问题,请参考以下文章

如何为 Sql Server 列的默认绑定使用参数化函数

PDO:显示表键无法正确绑定参数[重复]

PDO 只返回 mysql 的一半结果

PHP MySQL PDO 绑定输入/输出相同参数

用于“IN”语句的变量/字符串的 PHP PDO bindParam...? [复制]

旧 mysql 函数的 PDO 等价物,如 fetch assoc [重复]