2

Oracle 10g でクエリが失敗した場合に特定のエラー メッセージを取得したいと考えています。MySQL の場合、PHP には mysql_error() 関数があり、クエリが失敗した理由に関する詳細を返すことができます。oci_execute() 関数の php.net マニュアルを確認しましたが、失敗した場合にのみ false を返します。

oc_error() を使用してみましたが、何も得られません。

コードサンプルは次のとおりです。

    $err = array();
    $e = 0;

    //Cycle through all files and insert new records into database
    for($f=0; $f<sizeof($files); $f++)
    {
        $invoice_number = $files[$f]['invoice_number'];
        $sold_to = $files[$f]['sold_to'];
        $date = $files[$f]['date'];

        $sql = "insert into invoice (dealer_id, invoice_number, invoice_date) 
                values ('$sold_to', '$invoice_number', '$date')";

        $stid = oci_parse($conn, $sql);
        $result = oci_execute($stid);

        //If query fails
        if(!$result)
        {
            $err[$e] = oci_error();
            $e++;
        }
    } 

    print_r($err);

print_r($err) の応答:

Array ( [0] => [1] => [2] => [3] => [4] => [5] => [6] => [7] => [8] => ) 
4

2 に答える 2

7

$stid を oci_error に渡そうとしましたか?

$err[$e] = oci_error($stid);
于 2012-04-15T13:20:03.677 に答える
3

このoci_error()関数は、エラーのコンテキストを指定する引数を取ります。引数を渡さないと、特定の種類の接続エラーに対してのみ機能します。やりたいことは、次のように、解析されたステートメント リソースを渡すことです。

$err = oci_error($stid);

(からの戻り値oci_errorは配列であるため、出力全体を$err配列変数に割り当てたことにも注意してください)

于 2013-10-30T16:26:15.820 に答える