KO 한국어
버전: 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 메시지를 발생시킵니다. 실행이 계속되므로 개발 중에 유용합니다. PDO::ERRMODE_SILENT와 마찬가지로 $database->error를 통해 오류를 확인할 수 있습니다.
$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->errorInfonull입니다. 즉, null 여부를 확인해 오류 발생 여부를 판단할 수 있습니다.
$database->select("bccount", "*");

if ($database->error) {
	echo "오류가 발생했습니다.";
}

// 오류가 발생했습니다.
$database->select("account", "*");

if (!$database->error) {
    echo "오류가 없습니다.";
}

// 오류가 없습니다.