【问题标题】:Using LIKE wildcards inside pg_prepare在 pg_prepare 中使用 LIKE 通配符
【发布时间】:2012-05-24 13:05:29
【问题描述】:

我一直在尝试在准备好的语句中使用 LIKE,但是由于使用通配符 % 导致语法错误,php 不会执行该语句。

这里是代码

$query = pg_prepare($conn, "MyStatement", 
    'SELECT "Query" from "MyTable" 
     WHERE "Query" LIKE $1% 
     ORDER BY "MyColumn" DESC;');

$result = pg_execute($conn, "MyStatement", array($my_param));

问题是 php 在第二行向我显示了一个警告,声称存在语法错误。

【问题讨论】:

  • 对postgresql不是很熟悉,但是我的猜测是你需要在实际值中传递%,而不是在绑定上。像数组($my_param .'%')。
  • 感谢 Corbin,确实解决方案就是您提供的解决方案 :)

标签: php string postgresql-8.4


【解决方案1】:

我在使用 PDO 适配器绑定参数时遇到了同样的问题。解决方案是将“%”与变量一起传递:

$query = pg_prepare($conn, "MyStatement", 
'SELECT "Query" from "MyTable" 
 WHERE "Query" LIKE $1 
 ORDER BY "MyColumn" DESC;');

$result = pg_execute($conn, "MyStatement", array($my_param."%"));

如果你需要

...LIKE '%param%' ...

那么您的查询将是:

$result = pg_execute($conn, "MyStatement", array("%".$my_param."%"));

【讨论】:

  • 对。语法错误来自引用。它变成LIKE 'whatever'% 而不是LIKE 'whatever%'。所以是的,将通配符放在参数中,而不是模板中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多