Това е решение на моя проблем. Той решава проблема, като използва функцията PostgreSQL, за да замени ?
оператор.
Не ми харесва много, защото не прави PDO по-съответстващ на PostgreSQL. Но не намерих истинско решение.
CREATE FUNCTION json_key_exists(JSONB,TEXT) RETURNS BOOLEAN LANGUAGE SQL STABLE AS $f$
SELECT $1 ? $2
$f$;
И сега мога да използвам заявката:
SELECT * FROM post WHERE json_key_exists(locations, :location);
Заобиколното решение беше предложено от страхотния RhodiumToad от freenode #postgresql
Редактиране
Както предложи @Abelisto, няма нужда да създавате функцията по-горе като jsonb_exists(jsonb, text)
е avialabe