1

クラスコンストラクター内で新しい PDO 接続を作成し、そのクラスでのみ使用します。エラーが発生した場合、代わりに致命的なエラーが発生しますPDOException

致命的なエラー: メッセージ「SQLSTATE[42S22]: 列が fou ではありません.....

私のコードは次のとおりです。

class Helper
{
    private $_db;

    function __construct($config = FALSE)
    {

        $this->_db = new PDO($config['database']['dsn'], $config['database']['username'], $config['database']['password'], $config['database']['options']);
        $this->_db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    }
}

$config = array(
    'database' => array(
        'dsn' => 'mysql:host='.$dbhost.';dbname='.$dbname,
        'username' => $dblogin,
        'password' => $dbpass,
        'options' => array(
            PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'
        )
    )
);

try {
    $helper = new Helper($config);
} catch (PDOException $error) {
    die('Database Error: ' . $error->getMessage());
}

それで可能ですか?

4

1 に答える 1

2

それで可能ですか?

もちろん。それが実際の例外の目的です。

PDOException の代わりに致命的なエラーが発生します。

これは正しくありません。実際には例外が発生しますが、例外はキャッチされません (その結果、致命的なエラーが発生します)。

現在のエラーについて - 他のコード ブロックが原因である可能性が最も高いです。例外には常にスタック トレースが提供されるため、簡単に見つけることができます。あなたはそこでそれを捕まえるかもしれません。

ただし、手動でキャッチすることはお勧めしません。例外ハンドラーを作成し、すべての例外を 1 か所でキャッチすることをお勧めします (めったに発生しない何らかの方法でエラーを処理したい場合を除きます)。

于 2013-06-02T13:40:22.337 に答える