VI Tiếng Việt
Phiên bản: v2.6.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 | PDO::ERRMODE_WARNING | PDO::ERRMODE_EXCEPTION
	'error' => PDO::ERRMODE_SILENT,
]);

PDO::ERRMODE_SILENT

Trước PHP 8.0.0, đây là chế độ 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

Kể từ PHP 8.0.0, đây là chế độ mặc định. 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 và $database->errorInfo là null 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.