นี่เป็นคำถามเก่า แต่มีอีกวิธีหนึ่งที่ละเอียดอ่อนที่ทำให้ข้อความนี้เกิดขึ้นได้ มีการอธิบายไว้ค่อนข้างดีที่นี่ในเอกสารนี่ในเอกสาร
ลองนึกภาพสถานการณ์นี้:
try {
// code that triggers a pdo exception
} catch (Exception $e) {
throw new MyCustomExceptionHandler($e);
}
และMyCustomExceptionHandler
กำหนดไว้คร่าวๆเช่น:
class MyCustomExceptionHandler extends Exception {
public function __construct($e) {
parent::__construct($e->getMessage(), $e->getCode());
}
}
สิ่งนี้จะทริกเกอร์ข้อยกเว้นใหม่ในตัวจัดการข้อยกเว้นที่กำหนดเองเนื่องจากException
คลาสคาดหวังตัวเลขสำหรับพารามิเตอร์ที่สองในตัวสร้าง แต่PDOException
อาจมีการเปลี่ยนประเภทการส่งคืนแบบไดนามิกของ$e->getCode()
เป็นสตริง
วิธีแก้ปัญหานี้คือการกำหนดตัวจัดการข้อยกเว้นที่คุณกำหนดเองเช่น:
class MyCustomExceptionHandler extends Exception {
public function __construct($e) {
parent::__construct($e->getMessage());
$this->code = $e->getCode();
}
}
$_GET['start_date']
มี