选择一个带有 & 符号的字符串,其中包含 php 在 postgres 数据库上


Selecting a string with an Ampersand in it with php on a postgres database

我正在学校做一个小组项目,需要用php从Postgres数据库中选择。在 php 界面中尝试查询之前,我在 psql dbms 上测试了我的查询。这是我的测试查询: 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 数组中的字符串中没有 & 符号,这将起作用。我只是将数据库更改为没有 & 符号,但我真的无法控制它。有没有办法使用 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帮助解决这个问题。