我的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
我似乎无法找到错误,在询问之前,我试图绑定参数,但这不起作用。
答案 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}%", );