我可以将数组绑定到IN()条件吗?

我很想知道是否可以使用PDO将值数组绑定到占位符。这里的用例试图传递一个值数组,用于()中的IN条件

我希望能够做到这样:

<?php
$ids=数组(1,2,3,7,8,9);
$db=新的PDO(…);
$stmt=$db->预备(
"选择,*
从桌子上
其中id位于(:an_数组)'
);
$stmt->bindParam('an_数组',$id);
$stmt->执行();
?>

让PDO绑定并引用数组中的所有值

目前我正在做:

<?php
$ids=数组(1,2,3,7,8,9);
$db=新的PDO(…);
foreach($ids as&val)
$val=$db->报价($val)//遍历数组和引号
$in=内爆(“,”,$id)//创建逗号分隔列表
$stmt=$db->预备(
"选择,*
从桌子上
其中id在(“.$IN.”)中
);
$stmt->执行();
?>

这当然可以,但我只是想知道是否有一个内置的解决方案,我错过了

您必须构造查询字符串

<?php
$ids=数组(1,2,3,7,8,9);
$inQuery=内爆(“,”,数组填充(0,计数($ID),“?”);
$db=新的PDO(…);
$stmt=$db->预备(
"选择,*
从桌子上
其中id位于(“.$inQuery.”)中
);
//bindvalue是1索引的,所以$k+1
foreach($k=>$id)
$stmt->bindValue($k+1),$id);
$stmt->执行();
?>

chris(评论)和somebodyisintrouble都建议foreach循环

(…)
//bindvalue是1索引的,所以$k+1
foreach($k=>$id)
$stmt->bindValue($k+1),$id);
$stmt->执行();

。。。可能是冗余的,因此foreach循环和$stmt->execute可以替换为

<?php
(...)
$stmt->执行($id);

发表评论