VI Tiếng Việt
Phiên bản: v2.3.0

Xử lý lỗi

PDO cung cấp ba chế độ xử lý lỗi mà bạn có thể định cấu hình trên kết nối. Đọc thêm tại https://www.php.net/manual/en/pdo.error-handling.php.
$database = new Medoo([
	// Bắt buộc.
	'type' => 'mysql',
	'host' => 'localhost',
	'database' => 'name',
	'username' => 'your_username',
	'password' => 'your_password',

	// Tùy chọn.
		// PDO::ERRMODE_SILENT (mặc định) | PDO::ERRMODE_WARNING | PDO::ERRMODE_EXCEPTION
	'error' => PDO::ERRMODE_SILENT,
]);

PDO::ERRMODE_SILENT (mặc định)

Ở chế độ này, PDO đặt mã lỗi một cách âm thầm. Bạn có thể đọc thông báo lỗi từ $database->error và thông tin lỗi chi tiết từ $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 phát ra thông báo E_WARNING truyền thống. Điều này rất hữu ích trong quá trình phát triển vì việc thực thi vẫn tiếp tục. Bạn vẫn có thể đọc lỗi thông qua $database->error, giống như trong 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 ném ra một PDOException và dừng quá trình thực thi tiếp theo, điều này giúp bạn nhanh chóng xác định các đường dẫn mã bị lỗi.
$database = new Medoo([
	// ...
	'error' => PDO::ERRMODE_EXCEPTION
]);

$database->select("bccount", "*");

// Dòng này sẽ không được thực thi.
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
// Dùng try-catch để xử lý và in ra thông báo ngoại lệ.
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

Kiểm tra lỗi

Trong chế độ PDO::ERRMODE_SILENT và PDO::ERRMODE_WARNING, $database->error$database->errorInfonull khi không có lỗi xảy ra. Bạn có thể kiểm tra null để xác định xem có xảy ra lỗi hay không.
$database->select("bccount", "*");

if ($database->error) {
	echo "Đã xảy ra lỗi!";
}

// Đã xảy ra lỗi!
$database->select("account", "*");

if (!$database->error) {
    echo "Không có lỗi.";
}

// Không có lỗi.