ข้อผิดพลาด PHP PDO กับการจัดการข้อผิดพลาด
คู่มือการใช้งาน PHP PDO อ้างอิง
- PDO :: ERRMODE_SILENT
นี้เป็นโหมดเริ่มต้น PDO ก็จะตั้งรหัสข้อผิดพลาดให้ใช้ PDO :: errorcode () และ PDO :: errorInfo () วิธีการตรวจสอบคำสั่งและฐานข้อมูลวัตถุ หากมีข้อผิดเป็นเพราะวัตถุของคำสั่งการเรียกร้องจะถูกสร้างขึ้นแล้วคุณสามารถโทรหาวัตถุที่ PDOStatement :: errorcode () หรือ PDOStatement :: errorInfo () วิธีการ ถ้าข้อผิดพลาดที่เกิดจากการโทรบนวัตถุฐานข้อมูลแล้วเรียกวิธีการเหล่านั้นบนวัตถุฐานข้อมูล
- PDO :: ERRMODE_WARNING
นอกจากการตั้งค่านอกจากนี้รหัสข้อผิดพลาด, PDO จะออกมาเป็นข้อความ E_WARNING แบบดั้งเดิม หากคุณเพียงแค่ต้องการที่จะเห็นสิ่งที่เป็นปัญหาที่เกิดขึ้นโดยไม่รบกวนการไหลของแอพลิเคชันเพื่อให้การตั้งค่านี้ในช่วงเวลาการแก้จุดบกพร่อง / การทดสอบการเป็นประโยชน์อย่างมาก
- PDO :: ERRMODE_EXCEPTION
นอกจากการตั้งค่านอกจากนี้รหัสข้อผิดพลาด, PDO จะโยนชั้นยกเว้น PDOException และการตั้งค่าคุณสมบัติที่จะสะท้อนให้เห็นถึงรหัสข้อผิดพลาดและข้อผิดพลาดข้อความ การตั้งค่านี้ยังเป็นประโยชน์ในการแก้จุดบกพร่องเพราะเป็นจุดที่ไม่ถูกต้องได้อย่างมีประสิทธิภาพจะ enlarge สคริปต์ซึ่งอย่างรวดเร็วสามารถชี้รหัสพื้นที่ปัญหาที่อาจเกิด (จำ: ถ้าข้อยกเว้นทำให้เกิดสคริปต์ที่จะยุติการทำธุรกรรมโดยอัตโนมัติ ม้วน)
โหมดอีกข้อเป็นประโยชน์อย่างมากเมื่อเทียบกับคำเตือน PHP สไตล์แบบดั้งเดิมที่คุณสามารถสร้างข้อผิดพลาดของตัวเองจัดการได้อย่างชัดเจนมากขึ้นและค่าตอบแทนของการโทรแต่ละฐานข้อมูลรหัสรูปแบบที่ผิดปกติต้องเทียบกับโหมดเงียบและการตรวจสอบอย่างชัดเจน / ทำรังน้อย
สร้างตัวอย่าง PDO และตั้งค่าโหมดข้อผิดพลาด
<?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(); } ?>
หมายเหตุ: ไม่ว่าในปัจจุบันชุด PDO :: ATTR_ERRMODE หากการเชื่อมต่อล้มเหลว PDO :: __ สร้าง () จะเสมอโยนยกเว้น PDOException ยกเว้น uncaught เป็นอันตรายถึงชีวิต
สร้างตัวอย่าง PDO และตั้งค่าโหมดผิดพลาดในการสร้าง
<?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"); ?>
ดังกล่าวข้างต้นส่งออกตัวอย่างเช่นจะ:
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