Выбрав строку с амперсанд в 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 ответ:
Проблема, по-видимому, была вызвана кавычками, которые находятся вокруг строки, переданной в 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 за помощь в решении этой проблемы.