Как передать набор значений для предложения IN в массивы pg_execute ()

Я передаю в функцию массив категорий, и я хочу сделать этот запрос:

$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

0

Решение

IN конструкция требует строка или задавать, не массив.
Если вы передаете массив, используйте ANY построить.

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

Кроме того, литерал массива Postgres имеет вид '{elem1,elem2}', (Обратите внимание на фигурные скобки.)

И вам нужно пройти и то и другое параметры, такие как @ toto21 уже упоминались.

3

Другие решения

У вас есть два отличия значения: $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);
0

По вопросам рекламы [email protected]