PDO绑定未知数量的参数?

Bob*_*rbo 12 php pdo

$statement = $db->prepare('SELECT blah FROM blah_table WHERE blahID IN (:a, :b, :c)');
Run Code Online (Sandbox Code Playgroud)

如果在运行时之前参数的数量未知,该怎么办?我唯一能想到的就是构建一个sql字符串,以便根据需要制作尽可能多的参数占位符.

Pay*_*tey 11

并不是真正的hacky,循环是循环可变次数的语言的一部分.


$values = array('val1', 'val2');
$sql = 'SELECT * FROM Table Where column IN(';
$params = array();
foreach ($values as $val)
{
    $params[] = '?';
    $binds[] = $val;
}
$prep = $db->prepare($sql . join(', ', $params) . ')');
$i = 0;
foreach($binds as $bind){
   $prep->bindValue(++$i, $bind);
}
$prep->execute();

Run Code Online (Sandbox Code Playgroud)

遍历您需要绑定的每个值,创建一个绑定对象数组,在附加SQL后循环.


Geo*_*ins 4

您可以动态构建“IN (...)”字符串:

$in_string = '(';
foreach ( $array_of_parameters as $parameter ) {
    $in_string .= ':' . chr($i + 97) . ','; // Get the ASCII character
}
$in_string = substr($in_string, 0, -1) . ')';

$statement = $db->prepare("SELECT blah FROM blah_table WHERE blahID IN ($in_string)");
Run Code Online (Sandbox Code Playgroud)

  • 为什么要经历使用命名占位符的麻烦?用一个 ?无需额外工作也能正常工作吗? (8认同)