1
<?php

// This leaves the db connection in $conng require_once('/tms/http/html_docs/tease/csp/csp_tease.php');

    /* This a logging function. When called with:
     */

    function log_tkt_to_db($tkt_number, $date, $uid, $description, $conng)
    {
        echo "$tkt_number|$date|$uid|$description<br>";

        $sqlinsert = "insert into TEASE_TKTLOGS  VALUES ( \"$tkt_number\", \"$date\", \"$description\",  \"$uid\")";
        echo $sqlinsert . "<br>";
        $insert = OCIParse($conng, $sqlinsert);
        // OCIExecute($insert, OCI_COMMIT_ON_SUCCESS);
        OCIExecute($insert);
    }

log_tkt_to_db("00000000", "07/13/2012", "jt898u", "this a test, this is only a test", $conng);
?>  

私はこの出力を得る:

00000000|07/13/2012|jt898u|this a test, this is only a test
insert into TEASE_TKTLOGS (TICKET, DATE_TIME, CHANGE_DESC, ATTUID) VALUES ( "00000000", "07/13/2012", "this a test, this is only a test", "jt898u")

Warning: ociexecute() [function.ociexecute]: ORA-00972: identifier is too long in /appl/tms/http/html_docs/tease/dblog.php on line 17
4

1 に答える 1

5

ここには複数の問題があります。

  1. '最も簡単な答えは、二重引用符の代わりに一重引用符( )を使用する必要があるということです( Oracle Database SQLリファレンスの文字列リテラルを参照) 。
  2. oci_bind_by_nameやみくもに値をクエリに挿入するのではなく、次のようなものを使用する必要があります。解析と潜在的な SQL インジェクションを節約します。
  3. ociparsePHP 5.4でociexecute非推奨になりました。これらの代わりに、それぞれ と を使用する必要がoci_parseありoci_executeます。
于 2012-07-19T21:38:13.473 に答える