好吧,这真让我烦恼。如何在 PHP 的 PDO 中为 SQL“IN”语句绑定参数(有多个值)?
这是基础知识...
$allow = "'red', 'blue'";
SELECT * FROM colors WHERE type IN (:allow);
$stmt->bindParam(':allow', $allow);
当我单独插入 $allow 时,这工作正常,但是当尝试绑定它并使用 :allow 时,它无法工作。有谁知道这是为什么吗?
注意:我确实将 PDO 的其余部分正确设置为其他变量(不是字符串)正常工作,我只是没有包含它,因为它是不必要的。
deceze在评论中所说的是正确的。这是我以前做过的一种方法。
基本上,您可以通过循环数组值并添加绑定名称来创建 sql 字符串的
IN
部分。
$allow = array( 'red', 'blue' );
$sql = sprintf(
"Select * from colors where type in ( %s )",
implode(
',',
array_map(
function($v) {
static $x=0;
return ':allow_'.$x++;
},
$allow
)
)
);
这会导致
Select * from colors where type in ( :allow_0,:allow_1 )
然后只需循环
$allow
数组并使用bindValue绑定每个变量即可。
foreach( $allow as $k => $v ){
$stmnt->bindValue( 'allow_'.$k, $v );
}
我在意识到 deceze 链接到一个提供类似示例的问题之前添加了此内容。我将把它留在这里,因为它展示了如何使用命名绑定变量而不是?s
绑定函数会将整个列表视为字符串,而不是多个离散值。