2

PHP アプリケーションで PDO MySQL ドライバーを使用していますが、モデルの 1 つで次のようにしています。

public function getAllUsers() {
    $this->st = $this->db->query('SELECT name FROM users');
    $this->st->setFetchMode(PDO::FETCH_OBJ);
    $users = array();
    while($row = $this->st->fetch()) {
        array_push($users, $row->name);
    }

    return $users;
}

$this->db親クラスから継承されたデータベース ハンドルです。問題は、何らかの理由$this->dbで有効なデータベース オブジェクトでない場合、次の致命的なエラーが発生することです。

非オブジェクトでのメンバー関数 query() の呼び出し

これは予想されることですが、エンドユーザーにとって簡単にするために、メソッドを try-catch ブロックでラップしたり、エラーチェックを実行したりしたくありません。どうすればその致命的なエラーをキャッチできるのか疑問に思っています。代わりに例外をスローします (アプリケーション全体で例外を使用します)。

このような場合にのみ例外をスローする PDO オプションはありますか?

編集:再読して、継承ツリーのさらに上のtry-catchブロックにラップされた多くのコードがあることを追加する必要があるため、これが致命的なエラーではなく例外を生成した場合、それをキャッチして終了することができますアプリケーションを優雅に。

4

1 に答える 1

3

これで PDO に強制的に例外をスローさせることができます

$db = new PDO($dsn, $user, $pass, array(
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
);

しかし、オブジェクトの問題PDOだけとは関係がないため、これはあなたのケースには役に立たないと思います。null

あなたがやろうとしていることはこれと同等です

$a = null;
$a->query();
于 2012-10-10T17:14:22.837 に答える