0

私はオラクルの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 が条件の「無効な識別子」でチョークしないようにするために必要な変換があります。次のように、ステートメントから "and u.username!="foo" and 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 に渡されるユーザーと日付の条件を取得するためのステートメントを構成する適切な方法は何ですか?

4

1 に答える 1

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 */
于 2012-03-22T13:21:12.270 に答える