我可以将数组绑定到 PDO 查询中的 IN() 条件吗?

新手上路,请多包涵

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

我希望能够做这样的事情:

 <?php
$ids=array(1,2,3,7,8,9);
$db = new PDO(...);
$stmt = $db->prepare(
    'SELECT *
     FROM table
     WHERE id IN(:an_array)'
);
$stmt->bindParam('an_array',$ids);
$stmt->execute();
?>

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

目前我正在做:

 <?php
$ids = array(1,2,3,7,8,9);
$db = new PDO(...);
foreach($ids as &$val)
    $val=$db->quote($val); //iterate through array and quote
$in = implode(',',$ids); //create comma separated list
$stmt = $db->prepare(
    'SELECT *
     FROM table
     WHERE id IN('.$in.')'
);
$stmt->execute();
?>

哪个确实可以完成这项工作,但只是想知道我是否缺少内置的解决方案?

原文由 Andru 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 344
1 个回答

你可以转换这个:

\(stmt = \)db->prepare(‘SELECT * FROM table WHERE id IN(’.$in.‘)’);

在这:

\(stmt = \)db->prepare(‘SELECT * FROM table WHERE id IN(:id1, :id2, :id3, :id7, :id8, :id9)’);

并用这个数组执行它:

$stmt->execute(array( :id1 =>1, :id2 =>2, :id3 =>3, :id7 =>7, :id8 =>8, :id9 => 9 ) );

因此:

 $in = array();
$consultaParam = array();
foreach($ids as $k => $v){
    $in[] = ':id'.$v;
    $consultaParam[':id'.$v] = $v;
}

最终代码:

 $ids = array(1,2,3,7,8,9);
$db = new PDO(...);

$in = array();
$consultaParam = array();
foreach($ids as $k => $v){
    $in[] = ':id'.$v;
    $consultaParam[':id'.$v] = $v;
}

$stmt = $db->prepare(
    'SELECT *
     FROM table
     WHERE id IN('.$in.')'
);
$stmt->execute($consultaParam);

原文由 Mague 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题