Я работаю над групповым проектом из школы, который требует выбора из базы данных Postgres с помощью php.
Я проверил свои запросы на psql dbms, прежде чем пытаться их в интерфейсе 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?
Кажется, что проблема была вызвана кавычками, которые находятся вокруг строки, переданной в sql, путем передачи строки непосредственно через подготовленный оператор. "Beowulf & Grendel"
когда это должно быть передано в базу данных, как это 'Beowulf & Grendel'
Также кажется, что даже если он не отображался в var_dump () непосредственно в строке, распечатайте его
на самом деле отправлял это как это SELECT m.movieid, m.tomatourl FROM movies m WHERE title = 'Beowulf & Grendel';
Единственное, что выдает его, это количество символов в var_dump, а не распечатка строки. Исправление для этого было сделать html_entity_decode()
на титул передан в.
Отдельное спасибо DarkBee и Daniel Verite за помощь в решении этой проблемы.
Других решений пока нет …