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

2 つの値が区別されます: $id_user(文字列) とコンマで区切られたリスト カテゴリ (内破後の文字列) 配列$valueには 2 つの値のみを含める必要があります。これを試して :

$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 に答える