2012-04-12 17 views
1

私は現在、PDOを使用するように切り替えましたが、例外処理に問題があります。接続は正しく、クエリは完璧に機能しますが、意図的な間違いをすると、エラーは私の予想どおりに処理されません。PDO PHP未知の例外

クエリ内のテーブル名が存在しないテーブルに変更されました。下記のコードから、私はページに 'データベースエラー'を表示する代わりに恐ろしいオレンジエラーが出てくると期待しています。

'メッセージ' SQLSTATE [42S02]で「キャッチされない例外」PDOException: C:\ wamp \ www \ website \ functions.phpの行46 '

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

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

+0

'PDOException'の代わりに通常の' Exception'をキャッチしようとするとどうなりますか? – Crontab

+0

クエリはどこですか?それは接続ポイントではなく、例外が発生する場所です。 – Paystey

+0

名前空間で作業していますか?よくある間違いは '\ YourException'を捕まえる必要があるということです! – Nanne

答えて

5

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

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

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

+0

オブジェクトが作成されたときにエラーが発生する*以外は、*事実の後に属性を設定すると何も助けになりません。 – Crontab

+0

アドバイスされたコードを修正しましたが、同じエラーが続いています – Phil

+0

@Crontabもちろん、当然ですが、彼が質問について話しているOPのケースには実際には当てはまりません。 – jeroen

関連する問題