PDO::ERRMODE_SILENT
Ini adalah modus bawaan. PDO hanya akan menyetel kode kesalahan, yang dapat diperiksa menggunakan metode PDO::errorCode() dan PDO::errorInfo() pada pernyataan dan objek database. Jika kesalahan terjadi karena panggilan ke objek pernyataan, Anda dapat memanggil metode PDOStatement::errorCode() atau PDOStatement::errorInfo() objek tersebut. Jika error disebabkan oleh pemanggilan objek database, maka kedua metode di atas dapat dipanggil pada objek database.
PDO::ERRMODE_WARNING
Selain mengatur kode kesalahan, PDO juga akan mengirimkan pesan E_WARNING tradisional. Pengaturan ini berguna selama proses debug/pengujian jika Anda hanya ingin melihat apa yang salah tanpa mengganggu alur aplikasi Anda.
PDO::ERRMODE_EXCEPTION
Selain mengatur kode kesalahan, PDO juga akan menampilkan kelas pengecualian PDOException dan mengatur propertinya untuk mencerminkan kode kesalahan dan informasi kesalahan. Pengaturan ini juga sangat berguna selama proses debug, karena secara efektif memperbesar titik di skrip di mana kesalahan terjadi, memungkinkan Anda dengan cepat menentukan area masalah yang potensial dalam kode (ingat: jika pengecualian menyebabkan skrip berhenti, maka transaksi secara otomatis dibatalkan (roll).
Hal lain yang sangat berguna tentang mode pengecualian adalah Anda dapat membuat penanganan kesalahan Anda sendiri dengan lebih jelas daripada peringatan gaya PHP tradisional, dan ini memerlukan lebih sedikit kode daripada mode senyap dan secara eksplisit memeriksa nilai kembalian dari setiap panggilan database.
<?php$dsn = 'mysql:dbname=testdb;host=127.0.0.1';$user = 'dbuser';$password = 'dbpass';coba { $dbh = PDO baru($dsn, $user, $password ); $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);} tangkapan (PDOException $e) { echo 'Koneksi gagal: ' $e->getMessage();}?>
Catatan: Terlepas dari apakah PDO::ATTR_ERRMODE saat ini disetel, PDO::__construct() akan selalu memunculkan PDOException jika koneksi gagal. Pengecualian yang tidak tertangkap berakibat fatal.
<?php$dsn = 'mysql:dbname=test;host=127.0.0.1';$user = 'googleguy';$password = 'googleguy';/* Menggunakan try/catch di sekitar konstruktor masih berfungsi meskipun ERRMODE disetel PERINGATAN karena PDO::__construct akan selalu memunculkan PDOException jika koneksi gagal. */coba { $dbh = new PDO($dsn, $user, $password, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING));} catch (PDOException $e) { echo 'Koneksi gagal: ' $ e->getMessage(); exit;}// Ini akan menyebabkan PDO mengeluarkan E_WARNING kesalahan tingkat, bukan pengecualian (ketika tabel data tidak ada) $dbh->query("SELECT falsecolumn FROM falsetable");?>
Rutinitas di atas akan menghasilkan:
Peringatan: PDO::query(): SQLSTATE[42S02]: Tabel atau tampilan dasar tidak ditemukan: 1146 Tabel 'test.wrongtable' tidak ada di/tmp/pdo_test.php on line 18tambahkan catatan tambahkan catatan