在postgres数据库上使用php选择带有符号和的字符串
我在学校做一个小组项目,需要用php从Postgres数据库中进行选择。 在php界面中尝试查询之前,我在psql dbms上测试了我的查询。这是我的测试查询:在postgres数据库上使用php选择带有符号和的字符串,php,database,postgresql,ampersand,Php,Database,Postgresql,Ampersand,我在学校做一个小组项目,需要用php从Postgres数据库中进行选择。 在php界面中尝试查询之前,我在psql dbms上测试了我的查询。这是我的测试查询: 从电影m中选择m.movieid、m.tomatourl,其中title='Beowulf&Grendel' 该查询确实会从我需要的数据库返回信息,但是在php中使用该查询时,它不会返回任何信息。 pg_last_error()什么也没说 我可以通过什么方式确保我可以选择带有符号(&)的标题? 我尝试过将字符串分离,并使用sql代码将它
从电影m中选择m.movieid、m.tomatourl,其中title='Beowulf&Grendel'代码>
该查询确实会从我需要的数据库返回信息,但是在php中使用该查询时,它不会返回任何信息。
pg_last_error()什么也没说
我可以通过什么方式确保我可以选择带有符号(&)的标题?
我尝试过将字符串分离,并使用sql代码将它们重新组合在一起:
从电影m中选择m.movieid,m.tomatourl,其中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语句?问题似乎是由传递到sql的字符串周围的引号引起的,通过将字符串直接传递到准备好的语句,就像这样“Beowulf&Grendel”
当它必须像这样传递到数据库时'Beowulf&Grendel'
看起来,即使它没有直接显示在字符串打印输出的var_dump()中,它也会显示出来
实际上是这样发送的:从电影m中选择m.movieid,m.tomatourl,其中title='Beowulf&;格伦德尔'代码>是唯一一个在var_转储中给出字符计数而不是字符串打印输出的东西。解决方法是对传入的标题执行html\u entity\u decode()
。
特别感谢DarkBee和Daniel Verite帮助解决此问题。您确定&
存储为&
而不是&代码>?我不相信我是,如果它像那样存储,var_dump()会那样显示吗?从电影m中选择m.movieid,m.tomatourl,其中title='Beowulf'| | | chr(38)| | |'Grendel'
这本应确保不会发生,但它没有起作用chr()
使用的是sql而不是php。这一个也可以直接通过psql工作。请使用$i=array('Beowulf&Grendel')进行测试代码>就在pg_执行(…)
之前。这应该像预期的那样工作,并证明在这种情况下,与符号没有特别的问题。然后看看当它不起作用时,$i
中到底有什么。