PDO::ERRMODE_SILENT
นี่คือโหมดเริ่มต้น PDO จะตั้งค่ารหัสข้อผิดพลาดซึ่งสามารถตรวจสอบได้โดยใช้วิธี PDO::errorCode() และ PDO::errorInfo() บนคำสั่งและวัตถุฐานข้อมูล หากข้อผิดพลาดเกิดขึ้นเนื่องจากการเรียกไปยังวัตถุคำสั่ง คุณสามารถเรียกวิธี PDOStatement::errorCode() หรือ PDOStatement::errorInfo() ของวัตถุนั้นได้ หากข้อผิดพลาดเกิดจากการเรียกออบเจ็กต์ฐานข้อมูล คุณสามารถเรียกใช้สองวิธีข้างต้นบนออบเจ็กต์ฐานข้อมูลได้
PDO::ERRMODE_WARNING
นอกเหนือจากการตั้งรหัสข้อผิดพลาดแล้ว PDO ยังส่งข้อความ E_WARNING แบบเดิมอีกด้วย การตั้งค่านี้มีประโยชน์ในระหว่างการดีบัก/การทดสอบ หากคุณต้องการดูว่ามีอะไรผิดพลาดโดยไม่ขัดจังหวะการทำงานของแอปพลิเคชันของคุณ
PDO::ERRMODE_EXCEPTION
นอกเหนือจากการตั้งค่ารหัสข้อผิดพลาดแล้ว PDO จะส่งคลาสข้อยกเว้น PDOException และตั้งค่าคุณสมบัติให้สะท้อนถึงรหัสข้อผิดพลาดและข้อมูลข้อผิดพลาด การตั้งค่านี้ยังมีประโยชน์มากในระหว่างการดีบัก เนื่องจากจะขยายไปยังจุดในสคริปต์ที่เกิดข้อผิดพลาดได้อย่างมีประสิทธิภาพ ช่วยให้คุณสามารถระบุพื้นที่ที่อาจเป็นปัญหาในโค้ดได้อย่างรวดเร็ว (โปรดจำไว้ว่า: หากข้อยกเว้นทำให้สคริปต์ยุติการทำงาน ธุรกรรมจะถูกย้อนกลับโดยอัตโนมัติ)
อีกสิ่งที่มีประโยชน์มากเกี่ยวกับโหมดข้อยกเว้นก็คือ คุณสามารถสร้างข้อผิดพลาดของคุณเองในการจัดการได้ชัดเจนกว่าคำเตือนแบบ PHP แบบดั้งเดิม และต้องใช้โค้ดน้อยกว่าโหมดเงียบ และตรวจสอบค่าที่ส่งคืนของการเรียกฐานข้อมูลแต่ละครั้งอย่างชัดเจน /Less Nested
<?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);} จับ (PDOException $e) { echo 'การเชื่อมต่อล้มเหลว: ' . $e->getMessage();}?>
หมายเหตุ: ไม่ว่าปัจจุบัน PDO::ATTR_ERRMODE จะถูกตั้งค่าไว้ก็ตาม PDO::__construct() จะส่ง PDOException เสมอหากการเชื่อมต่อล้มเหลว ข้อยกเว้นที่ไม่ได้รับการตรวจสอบนั้นเป็นอันตรายถึงชีวิต
<?php$dsn = 'mysql:dbname=test;host=127.0.0.1';$user = 'googleguy';$password = 'googleguy';/* การใช้ try/catch รอบ Constructor ยังคงใช้งานได้แม้ว่าจะมีการตั้งค่า ERRMODE ไว้ก็ตาม คำเตือน เนื่องจาก 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");?>
รูทีนข้างต้นจะส่งออก:
คำเตือน: PDO::query(): SQLSTATE[42S02]: ไม่พบตารางฐานหรือมุมมอง: 1146 ตาราง 'test.wrongtable' ไม่มีอยู่ใน/tmp/pdo_test.php ออนไลน์ 18เพิ่มบันทึกย่อ เพิ่มบันทึกย่อ