查询在php中返回0结果,但在oracle SQL开发人员中它返回52结果

时间:2015-08-20 07:34:40

标签: php sql oracle

我的oracle查询有问题。当我在PHP中运行它时,它返回0结果。如果我在Oracle SQLDeveloper中运行相同的Query,则返回52个结果。

这是PHP中的查询:

SELECT name , zipcity FROM  import_persons WHERE upper(:zoekop) LIKE '%:zoekwaarde%' AND status < 3 ORDER BY name
$parameters = array(':zoekop' => $zoekop, ':zoekwaarde' => $zoekwaarde);

我在SQLDeveloper中运行的查询,手动填充变量。(从PHP中的echo中复制它们)。

SELECT  name , zipcity FROM import_persons WHERE upper(name) LIKE '%Q%' AND status < 3 ORDER BY name

我似乎无法找到错误,在询问之前,我试图绑定参数,但这不起作用。

3 个答案:

答案 0 :(得分:2)

这里有两个问题:

SELECT name , zipcity FROM  import_persons
    WHERE UPPER(:zoekop) LIKE '%:zoekwaarde%' AND status < 3
    ORDER BY name

你使用绑定参数很好,但不幸的是只能绑定值;由于:zoekop是列的占位符,因此您必须使用传统的字符串连接(如果列名来自用户输入,请使用白名单来保证安全性。)

您可以绑定:zoekwaarde,但通配符必须是您绑定的字符串的一部分,而不是查询中的一部分。因此,您的SQL看起来有点像这样:

SELECT name , zipcity FROM  import_persons
    WHERE UPPER(zoekop_col) LIKE :zoekwaarde AND status < 3
    ORDER BY name

请注意,查询不包含引号 - 它们不是必需的,因为绑定系统知道您在此位置绑定的参数的类型。把它全部包装起来,你现在只有一个参数可以绑定:

$parameters = array(':zoekwaarde' => "%{$zoekwaarde}%", );

答案 1 :(得分:0)

我不知道PHP所以这是一个猜测,但我不知道是否

LIKE '%:zoekwaarde%' 

将变量名称作为文字字符串,你可以使用

之类的东西
LIKE '%' || :zoekwaarde || '%'

答案 2 :(得分:0)

(代表OP发表。)

感谢halfer的回答,我能够解决问题。修复:

$query_01 = "SELECT name , zipcity FROM  import_persons WHERE upper(name) LIKE :zoekwaarde AND status < 3 ORDER BY name";
$parameters = array(':zoekwaarde' => "%{$zoekwaarde}%", );