用于sql的php oci_execute模式

时间:2012-03-22 13:12:17

标签: php oracle oci8

我在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的正确方法是什么?

1 个答案:

答案 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 */