ระบุว่าส่วนใหญ่โหมดข้อผิดพลาดที่แนะนำสำหรับ PDO คือERRMODE_EXCEPTION
, ไม่โดยตรงexecute()
การตรวจสอบผลเคยจะทำงาน เนื่องจากการเรียกใช้โค้ดจะไม่ถึงเงื่อนไขที่เสนอในคำตอบอื่น ๆ
ดังนั้นจึงมีสามสถานการณ์ที่เป็นไปได้ในการจัดการผลการดำเนินการสืบค้นใน PDO:
- เพื่อบอกความสำเร็จไม่จำเป็นต้องมีการตรวจสอบ เพียงแค่ปฏิบัติตามขั้นตอนโปรแกรมของคุณ
- ในการจัดการกับข้อผิดพลาดที่ไม่คาดคิดให้ใช้เหมือนเดิม - ไม่จำเป็นต้องใช้รหัสจัดการทันที ข้อยกเว้นจะเกิดขึ้นในกรณีที่เกิดข้อผิดพลาดของฐานข้อมูลและจะกระจายไปยังตัวจัดการข้อผิดพลาดทั่วทั้งไซต์ซึ่งในที่สุดจะทำให้เกิดข้อผิดพลาด 500 หน้า
- ในการจัดการข้อผิดพลาดที่คาดไว้เช่นคีย์หลักที่ซ้ำกันและหากคุณมีสถานการณ์บางอย่างที่จะจัดการข้อผิดพลาดนี้ให้ใช้ตัว
try..catch
ดำเนินการ
สำหรับผู้ใช้ PHP ทั่วไปมันฟังดูแปลก ๆ - เป็นอย่างไรบ้างที่จะไม่ตรวจสอบผลลัพธ์โดยตรงของการดำเนินการ - แต่นี่เป็นวิธีการทำงานของข้อยกเว้น - คุณตรวจสอบข้อผิดพลาดที่อื่น ครั้งเดียวสำหรับทุกคน สะดวกมาก
ดังนั้นโดยสรุป: ในรหัสปกติคุณไม่จำเป็นต้องจัดการข้อผิดพลาดใด ๆ เลย เพียงแค่เก็บรหัสของคุณตามที่เป็นอยู่:
$stmt->bindParam(':field1', $field1, PDO::PARAM_STR);
$stmt->bindParam(':field2', $field2, PDO::PARAM_STR);
$stmt->execute();
echo "Success!";
เมื่อประสบความสำเร็จมันจะบอกคุณเช่นนั้นหากเกิดข้อผิดพลาดจะแสดงหน้าข้อผิดพลาดปกติที่แอปพลิเคชันของคุณแสดงในโอกาสดังกล่าว
เฉพาะในกรณีที่คุณมีสถานการณ์การจัดการนอกเหนือจากการรายงานข้อผิดพลาดเท่านั้นให้ใส่คำสั่งแทรกของคุณในตัวtry..catch
ดำเนินการตรวจสอบว่าเป็นข้อผิดพลาดที่คุณคาดไว้หรือไม่และจัดการหรือไม่ หรือ - หากข้อผิดพลาดแตกต่างออกไปให้โยนข้อยกเว้นอีกครั้งเพื่อให้สามารถจัดการโดยตัวจัดการข้อผิดพลาดทั่วทั้งไซต์ได้ตามปกติ ด้านล่างนี้เป็นโค้ดตัวอย่างจากบทความของฉันเกี่ยวกับข้อผิดพลาดในการจัดการกับ PDO :
try {
$pdo->prepare("INSERT INTO users VALUES (NULL,?,?,?,?)")->execute($data);
} catch (PDOException $e) {
if ($e->getCode() == 1062) {
} else {
throw $e;
}
}
echo "Success!";
ในโค้ดด้านบนเรากำลังตรวจสอบข้อผิดพลาดเฉพาะเพื่อดำเนินการบางอย่างและโยนข้อยกเว้นใหม่สำหรับข้อผิดพลาดอื่น ๆ (ไม่มีตารางดังกล่าว) ซึ่งจะรายงานไปยังโปรแกรมเมอร์
อีกครั้ง - เพียงเพื่อบอกผู้ใช้บางอย่างเช่น "การแทรกของคุณสำเร็จแล้ว" ก็ไม่จำเป็นต้องมีเงื่อนไขใด ๆ