[ PHP ] oci_error 関数で SQL エラー情報を取得

Pocket

ここでは、PHP フレームワークである Zend Framework1 がオラクルへの接続エラーや SQL 実行エラーの情報をどのように取得しているかを掲載しています。

スポンサーリンク


oci_error 関数を使ったエラー情報の取得

以下がサンプルコードになります。詳細はサンプル中のコメントを参照ください。

    /*
     * データベースへ接続
     */
    function connect() 
    {        
        // データベースへ接続
        $conn = oci_connect('user', 'password', 'tns', 'JA16SJISTILDE');
        if(!$conn) {
            // エラー文字列を組み立てて例外をスローする
            throw new Exception(createOciErrorMessage(oci_error()));
        }
        return $conn;
    }

    /*
     * Oracle エラー文字列を作成する
     */
    function createOciErrorMessage($error)
    {
        $message = 'Unknown exception';
        // 配列の場合
        if (is_array($error)) {
            // エラー箇所が特定されていない場合
            if (!isset($error['offset'])) {
                $message = $error['code'] .' '. $error['message'];
            
            // エラー箇所が督励されている場合は、その位置に * をつけて
            // わかり易くする
            // SQL 実行エラー時に活躍する
            } else {
                $message = $error['code'] .' '. $error['message']." "
                         . substr($error['sqltext'], 0, $error['offset'])
                         . "*"
                         . substr($error['sqltext'], $error['offset']);
            }
       // たんなる文字列の場合はそのまま返す
       } else if (is_string($error)) {
           $message = $error;
       }
       return $message;
    }

エラーは発生しないことが何よりですが、エラーとなった場合の情報の記録も大切です。初心忘れるべからずの精神は大切にしたいものです。デバッガが高性能になったおかげで、ログとして外部ファイルに出力する作業が面倒に感じてきている自分がいます。

参考
スポンサーリンク

Pocket

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>