小编典典

PHP PDO bindParam用于``泪N''陈述式的变数/字串?

sql

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

这是基础知识…

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

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

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

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

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

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


阅读 148

收藏
2021-04-07

共1个答案

小编典典

在评论中,德塞兹所说的是正确的。这是我以前做过的方法。

基本上,您可以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 );
}

我在意识到与一个给出类似示例的问题相关联的降序之前添加了此内容。我将其留在这里是因为它显示了如何使用命名的绑定变量而不是?s来完成此操作。

2021-04-07