1

現在、PDOの使用に切り替えましたが、例外の処理に問題があります。接続は正しく、クエリは完全に機能しますが、意図的なミスを犯した場合、エラーは期待どおりに処理されません。

クエリ内のテーブルの名前を存在しないテーブルに変更しました。以下に示すコードから、ページに「データベースエラー」が出力されると予想されますが、代わりに、次のような恐ろしいオレンジ色のエラーが表示されます...

'キャッチされなかった例外'PDOException'とメッセージ'SQLSTATE[42S02]:ベーステーブルまたはビューが見つかりません:1146テーブル' test.post'がC:\ wamp \ www \ website\functions.phpの46行目に存在しません'

データベースに接続するときのコードは次のとおりです...

$hostname = 'localhost';
$username = '';
$password = '';
try{
    $dbh = new PDO("mysql:host=$hostname;dbname=test", $username, $password);
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
     print ("Database Error");
}

私は間違いを犯していますか、それともPDOエラーを処理する別の方法がありますか?

4

1 に答える 1

5

接続後、エラー処理を設定する必要があります。

$dbh = new PDO("mysql:host=$hostname;dbname=test", $username, $password);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

編集:例外はスローされた場所でキャッチされることに注意してください。そのためtry catch、クエリの周囲にブロックを配置する必要があります。接続時に使用するブロックは、そこで例外をキャッチするだけです(@Crontabのコメントを参照してください)。

于 2012-04-12T13:54:00.683 に答える