PHP PDO bindParam用于变量/字符串用于“IN”语句...?

时间:2012-05-30 00:50:03

标签: php mysql sql string pdo

  

可能重复:
  PHP PDO: Can I bind an array to an IN() condition?

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

以下是基础知识......

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

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

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

当我自己插入$ allow时,这很好用,但是在尝试绑定它并使用时:允许它无法正常工作。有谁知道这是为什么?

注意:我确实已经将PDO的其余部分与其他变量(不是字符串)一起正确设置,我只是没有包含它,因为它是不必要的。

感谢任何帮助,谢谢。

2 个答案:

答案 0 :(得分:4)

评论中的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

答案 1 :(得分:0)

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