0

我将一个类别数组传递给一个函数,我想做这个查询:

$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
4

2 回答 2

3

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

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

此外,Postgres 数组文字的形式为'{elem1,elem2}'. (注意花括号。)

而且您需要传递两个参数,例如已经提到的@toto21。

于 2015-01-19T12:05:43.153 回答
0

您有两个不同的值:($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);
于 2015-01-19T11:56:10.187 回答