Выбрав строку с амперсанд в PHP на сервер базы данных


Я работаю над групповым проектом из школы, который требует выбора из базы данных Postgres с php. Я протестировал свои запросы на СУБД psql, прежде чем попробовать их в интерфейсе php. Это мой тестовый запрос: SELECT m.movieid, m.tomatourl FROM movies m WHERE title = 'Beowulf & Grendel'; Запрос возвращает информацию из базы данных, которая мне нужна, однако при использовании этого в php он ничего не возвращает. pg_last_error () ничего не говорит.

Каким образом я могу гарантировать, что смогу выбирать заголовки с амперсандами(&) в них? Я пробовал отделить струну и снова собрать их вместе с sql кодом: SELECT m.movieid, m.tomatourl FROM movies m WHERE title = 'Beowulf '||chr(38)||' Grendel' Я пытался сбежать от веревки. Вот пример некоторых моих php-кодов:

$query = 'SELECT m.movieid, m.tomatourl FROM movies m WHERE title = $1';
pg_prepare($conn, "getmovie", $query) or die(pg_last_error());
$result = pg_execute($conn, "getmovie", $i) or die("Query failed: ". pg_last_error());
$movie = pg_fetch_array($result, NULL, PGSQL_BOTH);

Это будет работать до тех пор, пока строка в массиве $i не содержит амперсанда. Я бы просто изменил базу данных, чтобы не было амперсанда, но я действительно не могу его контролировать. есть ли какой-то способ сделать оператор select подобным этому, используя функции PHP postgres?

1 2

1 ответ:

Проблема, по-видимому, была вызвана кавычками, которые находятся вокруг строки, переданной в sql, передавая строку непосредственно через подготовленный оператор, это похоже на следующее "Beowulf & Grendel" когда он должен быть передан в базу данных вот так 'Beowulf & Grendel'
Также кажется, что даже если он не был показан в var_dump () непосредственно в строке распечатки it
на самом деле посылал его как этот SELECT m.movieid, m.tomatourl FROM movies m WHERE title = 'Beowulf & Grendel'; единственное, что выдает его, это количество символов в var_dump, а не распечатка строки. Исправление для этого состояло в том, чтобы сделать html_entity_decode() на титуле, переданном.

Особая благодарность DarkBee и Daniel Verite за помощь в решении этой проблемы.