我正在从学校开展一个小组项目,需要从带有php的Postgres数据库中进行选择。
我在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
数组中的字符串中没有&符号,这就可以正常工作。
我只是将数据库更改为没有&符号,但我实际上无法控制它。
有没有办法使用php postgres函数做这样的select语句?
答案 0 :(得分:2)
问题似乎是由传入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帮助解决这个问题。