0

可能重复:
PHP PDO:我可以将数组绑定到 IN() 条件吗?

好吧,这真的很困扰我。如何在 PHP 的 PDO 中为 SQL“IN”语句绑定参数(具有多个值)?

这里是基本...

$allow = "'red', 'blue'";

SELECT * FROM colors WHERE type IN (:allow);

$stmt->bindParam(':allow', $allow);

当我自己插入 $allow 时,这可以正常工作,但是当尝试绑定它并使用 :allow 时,它无法工作。有人知道为什么是这样吗?

注意:我确实正确设置了 PDO 的其余部分,其他变量(不是字符串)正常工作,我只是没有包含它,因为它是不必要的。

任何帮助表示赞赏,谢谢。

4

2 回答 2

4

deceze 在评论中所说的是正确的。这是我以前做过的一种方法。

基本上,您IN通过循环数组值并添加绑定名称来创建 sql 字符串的一部分。

$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

于 2012-05-30T01:28:57.190 回答
0

绑定函数会将整个列表视为一个字符串,而不是多个离散值。

于 2012-05-30T01:28:28.603 回答