เวอร์ชัน: v2.3.0
ข้อผิดพลาดและการจัดการข้อผิดพลาด
PDO มีโหมดการจัดการข้อผิดพลาดสามโหมดที่คุณสามารถกำหนดค่าในการเชื่อมต่อ อ่านเพิ่มเติมได้ที่ https://www.php.net/manual/en/pdo.error-handling.php.
$database = new Medoo([ // จำเป็น 'type' => 'mysql', 'host' => 'localhost', 'database' => 'name', 'username' => 'your_username', 'password' => 'your_password', // ไม่บังคับ // PDO::ERRMODE_SILENT (ค่าเริ่มต้น) | PDO::ERRMODE_WARNING | PDO::ERRMODE_EXCEPTION 'error' => PDO::ERRMODE_SILENT, ]);
PDO::ERRMODE_SILENT (ค่าเริ่มต้น)
ในโหมดนี้ PDO จะตั้งค่ารหัสข้อผิดพลาดโดยไม่แจ้งให้ทราบ คุณสามารถอ่านข้อความแสดงข้อผิดพลาดได้จาก
$database->error และข้อมูลข้อผิดพลาดโดยละเอียดได้จาก $database->errorInfo$database = new Medoo([
// ...
'error' => PDO::ERRMODE_SILENT
]);
$database->select("bccount", "*");
var_dump($database->error);
var_dump($database->errorInfo);
// string(36) "Table 'master.bccount' doesn't exist"
//
// array(3) {
// [0]=> string(5) "42S02"
// [1]=> int(1146)
// [2]=> string(36) "Table 'master.bccount' doesn't exist"
// }
PDO::ERRMODE_WARNING
PDO ส่งเสียงข้อความ E_WARNING แบบดั้งเดิม สิ่งนี้มีประโยชน์ในระหว่างการพัฒนาเนื่องจากการดำเนินการยังคงดำเนินต่อไป คุณยังคงอ่านข้อผิดพลาดได้ผ่านทาง
$database->error เช่นเดียวกับใน PDO::ERRMODE_SILENT$database = new Medoo([
// ...
'error' => PDO::ERRMODE_WARNING
]);
$database->select("bccount", "*");
var_dump($database->error);
var_dump($database->errorInfo);
// Warning: PDOStatement::execute(): SQLSTATE[42S02]: Base table or view not found:
// 1146 Table 'bccount' doesn't exist in /src/Medoo.php on line 10
//
// string(36) "Table 'master.bccount' doesn't exist"
//
// array(3) {
// [0]=> string(5) "42S02"
// [1]=> int(1146)
// [2]=> string(36) "Table 'master.bccount' doesn't exist"
// }
PDO::ERRMODE_EXCEPTION
PDO ส่ง PDOException และหยุดการดำเนินการในภายหลัง ซึ่งช่วยให้คุณระบุเส้นทางโค้ดที่ล้มเหลวได้อย่างรวดเร็ว
$database = new Medoo([
// ...
'error' => PDO::ERRMODE_EXCEPTION
]);
$database->select("bccount", "*");
// บรรทัดนี้จะไม่ถูกเรียกใช้งาน
var_dump($database->error);
// Fatal error: Uncaught PDOException: SQLSTATE[42S02]: Base table or view not found
// 1146 Table 'master.bccount' doesn't exist in /src/Medoo.php:10
// Stack trace:
// #0 /src/Medoo.php(564): PDOStatement->execute()
// #1 /src/Medoo.php(1652): Medoo\Medoo->exec(Object(PDOStatement), Array)
// #2 /var/www/playground/index.php(44): Medoo\Medoo->select('bccount', Array, Array)
// #3 {main}
// thrown in /src/Medoo.php line 10
// ใช้ try-catch เพื่อจัดการและแสดงข้อความของข้อยกเว้น
try {
$database->select("bccount", "*");
} catch (PDOException $e) {
echo $e->getMessage();
}
// SQLSTATE[42S02]: Base table or view not found: 1146 Table 'master.bccount' doesn't exist
การตรวจสอบข้อผิดพลาด
ในโหมด PDO::ERRMODE_SILENT และ PDO::ERRMODE_WARNING
$database->error และ $database->errorInfo จะเป็น null เมื่อไม่มีข้อผิดพลาดเกิดขึ้น คุณสามารถตรวจสอบ null เพื่อดูว่ามีข้อผิดพลาดเกิดขึ้นหรือไม่$database->select("bccount", "*");
if ($database->error) {
echo "เกิดข้อผิดพลาด!";
}
// เกิดข้อผิดพลาด!
$database->select("account", "*");
if (!$database->error) {
echo "ไม่มีข้อผิดพลาด";
}
// ไม่มีข้อผิดพลาด