2012-05-16 56 views
9

我一直在尝试在预处理语句中使用LIKE,但由于使用通配符%导致语法错误,php将不执行语句。在pg_prepare中使用LIKE通配符

下面是代码

$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显示我在第二行声称语法错误警告。

非常感谢您提前!

+0

什么确切的错误? – zerkms

+2

对postgresql不太熟悉,但我的猜测是你需要在实际值中传递%,而不是绑定。像数组($ my_param。'%')。 – Corbin

+0

谢谢Corbin,的确解决方案是你提供的:) – danielrvt

回答

10

我有使用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."%")); 
+0

没错。语法错误来自引用。它会变成'LIKE',无论'%'而不是'LIKE'如何'%''。所以是的,把通配符放在参数中,而不是模板中。 –

+0

感谢您的回复家伙!这对我帮助很大!!! :) – danielrvt