相关疑难解决方法(0)

我可以将数组绑定到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();
?>
Run Code Online (Sandbox Code Playgroud)

并让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();
?>
Run Code Online (Sandbox Code Playgroud)

这当然能完成这项工作,但只是想知道是否有一个内置的解决方案我缺席了?

php arrays pdo prepared-statement where-in

549
推荐指数
17
解决办法
20万
查看次数

从$ _POST数组构造mysql select

这是我表单中的$ _POST数组.

Array ( [prescribedid] => Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 9 [4] => 13 )
Run Code Online (Sandbox Code Playgroud)

我想为数组中的任何项创建一个选择.我已经写了这个,它产生了正确的SELECT,但if()消除了尾随的OR使它变得笨重.

$query = "SELECT * ";
$query .= "FROM prescribed WHERE ";

for($i=0; $i<count($_POST["prescribedid"]); $i++) {
    $query .= "prescribedid={$_POST['prescribedid'][$i]} ";
        if($i < (count($_POST["prescribedid"])-1)) {
        $query .= "OR ";
        }
}
Run Code Online (Sandbox Code Playgroud)

它产生了这个:

SELECT * FROM prescribed WHERE prescribedid=1 OR prescribedid=2 OR prescribedid=3 OR prescribedid=9 OR prescribedid=13
Run Code Online (Sandbox Code Playgroud)

是否有另一种方法可以对SELECTS进行分组或编写FOR()以使其更清晰,即没有最后的IF().

html php mysql

6
推荐指数
1
解决办法
314
查看次数

标签 统计

php ×2

arrays ×1

html ×1

mysql ×1

pdo ×1

prepared-statement ×1

where-in ×1