Параметризация массива для предложений IN / =ANY на PHP с помощью PostgreSQL

Мне нужно передать массив строк в параметризованном запросе. Я пробовал следующее, но это вообще не работает.

$params = array( array('bob','andrew','larry') );
pg_query_params($conn, 'SELECT * FROM table1 WHERE field = ANY($1)', $params)

Я видел решения, которые преобразуют массив в строку, а затем используют string_to_array для преобразования ввода в массив на стороне базы данных, но поскольку эти строки вводятся пользователями, это может плохо закончиться, даже если я использовал разделитель, отличный от запятая. Я бы предпочел использовать более чистое решение для этого, если это возможно.

Есть ли способ сохранить этот запрос параметризованным и передать ему массив, не прибегая к преобразованию данных в строку?

Кстати, я использую PostgreSQL 8.3.


person LegacyCrono    schedule 31.05.2012    source источник
comment
возможный дубликат PHP PDO: могу ли я связать массив в условие IN()?   -  person goat    schedule 31.05.2012


Ответы (1)


pgsql.so связан с libpq, у которого нет такой возможности.

Внутренне в любом случае потребуется сериализовать массив в строку.

В libpqtypes эта возможность встроена, но теперь мне известно о любых библиотеках PHP, использующих ее.

person Quassnoi    schedule 31.05.2012