如何使用IN()参数执行PostgreSQL PREPARE查询

时间:2015-07-31 13:28:14

标签: php arrays postgresql prepared-statement

我试图从PHP准备一个查询,如:

pg_prepare($con, "prep", "select * from test where tid in ($1)");

然后执行:

$strpar = "3,4,6,8,10";
pg_execute($con, "prep", array($strpars));

问题是我无法传递一系列构建的值,因为prepare需要固定数量的参数。有没有办法让参数动态化?

1 个答案:

答案 0 :(得分:1)

使用数组表示一系列值:

pg_prepare($con, "prep", "select * from test where tid=ANY($1)");

$strpar = "{3,4,6,8,10}";
pg_execute($con, "prep", array($strpars));

您还可以创建一个PHP函数来接收PHP数组,并将其设置为Postgres预处理语句的有效数组,如下所示:

function php_array_to_pg ($array) {

    $values = "";

    foreach ($array as $value) {
        if ($values=="") {
        $values = $value;
        } else {
        $values = $values.",".$value;
        }
    }

    return "{".$values."}";
}

然后你发表如下声明:

pg_prepare($con, "prep", "select * from test where tid=ANY($1)");

$array = array(1,2,3,4);

pg_execute($con, "prep", array(php_array_to_pg ($array)));
相关问题