我在oracle上的php中有一个简单的查询:
$query='select u.username,u.lastname,u.firstname,c.event,c.reason
from users u, events c
where c.created_by=u.user_id and
u.username!="foo" and
c.event > "2012-01-01"';
这通过oci_parse很好....
但是有一个翻译需要发生,以便oci_execute不会阻塞条件的“无效标识符”。如果我从语句中删除“和u.username!=”foo“和c.event>'2012-01-01'”,上面的查询工作正常,如下所示:
$query='select u.username,u.lastname,u.firstname,c.event,c.reason
from users u, events c
where c.created_by=u.user_id';
构造语句以使用户和日期条件传递给oci_execute的正确方法是什么?
答案 0 :(得分:0)
在Oracle中,字符串由单引号'
分隔,而标识符由双引号"
分隔,因此您的查询应该是:
$query='select u.username,u.lastname,u.firstname,c.event,c.reason
from users u, events c
where c.created_by=u.user_id and
u.username!=\'foo\' and
c.event > \'2012-01-01\'';
您可以使用双引号来标识具有混合大小写名称的对象,例如:
CREATE TABLE "testTable" (id number);
SELECT * FROM testTable ; /* fails with ORA-00942*/
SELECT * FROM "testTable"; /* succeeds */