Для решения этой ситуации на
http://stackoverflow.com предлагают создать свои собственные операторы без символа
?
и выглядит это вот так:
-- Because PHP::PDO replace symbol '?' into SQL-query we can not use this operator for work with JSONB type.
-- alternative operator for '?'
CREATE OPERATOR ~@ (LEFTARG = jsonb, RIGHTARG = text, PROCEDURE = jsonb_exists);
-- alternative operator for '?|'
CREATE OPERATOR ~@| (LEFTARG = jsonb, RIGHTARG = text[], PROCEDURE = jsonb_exists_any);
-- alternative operator for '?&'
CREATE OPERATOR ~@& (LEFTARG = jsonb, RIGHTARG = text[], PROCEDURE = jsonb_exists_all);
Теперь мною приведенный выше PHP-код стал рабочим (разумеется я заменил оператор
?|
на
~@|
$statement = "SELECT id FROM public.parameter WHERE variations ~@| array[ '" . mb_strtolower( $title ) . "' ] LIMIT 1 OFFSET 0;";
$sth = $this->pdo->prepare( $statement );
$sth->execute();
Но, друзья, это ведь костыль!