3

PHP最近はwith CodeIgniterFrameworkを学んでいます。私は例外処理に取り組んでいますが、例外処理が設定db_debug = TRUEされている場合にデータベースエラーで機能しないことに驚いたことがありdatabase.phpます。

の場合db_debug = FALSE、エラーをスローしてキャッチできますが、 の場合TRUE、データベース エラーのあるページを直接表示します。

これが私のコードです:

Model

    $this->db->insert('tbl_name',$data);
    if (strpos($this->db->_error_message(),'constraint_name') !== FALSE)
    {
        throw new UniqueConstraintException($this->db->_error_message()); // UniqueConstraintException is customized excpetion
    }

Controller

        try
        {
             //calling the method from model having above code
        }
        catch(UniqueConstraintException $ex)
        {
              echo "There is already item with same item name";
        }
        catch(Exception $ex)
        {
             echo $ex->getMessage();
        }

設定があってもデータベースエラー時の例外処理を実装することはできdb_debug = TRUEますか?

4

1 に答える 1

10

CodeIgniterの人たちはおっとについて何も知りません。コードを調べると、DBドライバーでこのようなものが何百万回も見つかります(DRYについても何も知りません)。

if (<some condition>) {
    if ($this->db_debug) {
        log_message('error', 'Invalid query: '.$sql);
        return $this->display_error('db_invalid_query');
    }
    return FALSE;
}

したがって、この「機能」を無効にすることはできません。ただし、クラスCI_DB_driverを拡張してこの問題を取り除くことはできますが、DRYコードがないため、このクラスのほぼすべてをオーバーライドする必要があります...

于 2013-01-29T10:11:22.417 に答える