【问题标题】:How to pass a set of values for IN clause to pg_execute() arrays如何将 IN 子句的一组值传递给 pg_execute() 数组
【发布时间】:2015-01-19 11:39:30
【问题描述】:

我将一个类别数组传递给一个函数,我想进行以下查询:

$sql = "SELECT * 
        FROM trans   
        WHERE id_user = $1 AND id_cat IN ($2)";

$value = array($id_user, implode(",", $categories));

$resource = pg_prepare($db, "get_trans", $sql);
$resource = pg_execute($db, "get_trans", $value);

但是 pg_execute 给了我一个错误

Warning: pg_execute(): Query failed: ERRORE: sintassi di input non    valida per il tipo integer: "1,3,5,2,4,6,7" in /var/www/html/progetto-bd/application/function.php on line 370

【问题讨论】:

  • 在 Postgres 会话中获取英文错误消息:set lc_messages = 'C';

标签: php sql postgresql prepared-statement php-pgsql


【解决方案1】:

IN 构造需要 rowset,而不是数组。
如果您传递一个数组,请使用 ANY 构造。

SELECT * 
FROM   trans   
WHERE  id_user = $1 AND id_cat = ANY ($2);

此外,Postgres 数组字面量的格式为 '{elem1,elem2}'。 (注意花括号。)

你需要传递两个参数,就像已经提到的@toto21。

【讨论】:

    【解决方案2】:

    您有两个不同的值:$id_user(字符串)和用逗号分隔的列表类别(内爆后的字符串)您的数组 $value 应该只包含两个值。 试试这个:

    $str_categories = implode(",", $categories);
    $arr_value = array($id_user, $str_categories);
    $resource = pg_prepare($db, "get_trans", $sql);
    $resource = pg_execute($db, "get_trans", $arr_value);
    

    【讨论】:

      猜你喜欢
      • 2016-01-12
      • 2012-01-13
      • 1970-01-01
      • 2012-10-18
      • 2020-04-23
      • 1970-01-01
      • 2013-11-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多