error PHP PDO dengan penanganan kesalahan
- PDO :: ERRMODE_SILENT
Ini adalah mode default. PDO hanya akan mengatur kode kesalahan, gunakan PDO :: errorCode () dan metode PDO :: ErrorInfo () untuk memeriksa laporan dan objek database. Jika kesalahan ini disebabkan oleh obyek pernyataan panggilan dihasilkan, maka Anda dapat menghubungi bahwa objek PDOStatement :: errorCode () atau metode PDOStatement :: ErrorInfo (). Jika kesalahan berasal dari panggilan pada objek database, kemudian memanggil metode-metode pada objek database.
- PDO :: ERRMODE_WARNING
Selain menetapkan penambahan kode kesalahan, PDO akan memancarkan pesan E_WARNING tradisional. Jika Anda hanya ingin melihat masalah apa yang terjadi tanpa mengganggu aliran aplikasi, sehingga pengaturan ini dalam periode debugging / pengujian sangat berguna.
- PDO :: ERRMODE_EXCEPTION
Selain menetapkan penambahan kode kesalahan, PDO akan melemparkan kelas PDOException pengecualian dan mengatur properti untuk mencerminkan kode kesalahan dan pesan kesalahan. Pengaturan ini juga berguna selama debugging, karena titik yang salah secara efektif akan memperbesar script, yang bisa sangat cepat menunjukkan kode area masalah potensial (ingat: jika pengecualian menyebabkan script untuk mengakhiri transaksi secara otomatis kembali roll).
Modus pengecualian lain sangat berguna, dibandingkan dengan PHP-gaya peringatan tradisional, Anda dapat membangun kesalahan Anda sendiri menangani lebih jelas, dan nilai kembali dari setiap panggilan database, kode pola normal diperlukan dibandingkan dengan mode diam dan secara eksplisit memeriksa / bersarang kurang.
Membuat contoh PDO dan mengatur mode error
<?php $dsn = 'mysql:dbname=testdb;host=127.0.0.1'; $user = 'dbuser'; $password = 'dbpass'; try { $dbh = new PDO($dsn, $user, $password); $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch (PDOException $e) { echo 'Connection failed: ' . $e->getMessage(); } ?>
Catatan: Terlepas dari apakah set saat PDO :: ATTR_ERRMODE, jika koneksi gagal, PDO :: __ construct () akan selalu melempar pengecualian PDOException. eksepsi tidak tertangkap fatal.
Membuat contoh PDO dan mengatur mode kesalahan dalam constructor
<?php $dsn = 'mysql:dbname=test;host=127.0.0.1'; $user = 'googleguy'; $password = 'googleguy'; /* 使用 try/catch 围绕构造函数仍然有效,即使设置了 ERRMODE 为 WARNING, 因为如果连接失败,PDO::__construct 将总是抛出一个 PDOException 异常。 */ try { $dbh = new PDO($dsn, $user, $password, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING)); } catch (PDOException $e) { echo 'Connection failed: ' . $e->getMessage(); exit; } // 这里将导致 PDO 抛出一个 E_WARNING 级别的错误,而不是 一个异常 (当数据表不存在时) $dbh->query("SELECT wrongcolumn FROM wrongtable"); ?>
Di atas contoh output akan:
Warning: PDO::query(): SQLSTATE[42S02]: Base table or view not found: 1146 Table 'test.wrongtable' doesn't exist in /tmp/pdo_test.php on line 18 add a note add a note