版本: v2.3.0
错误处理
PDO 提供了三种可在连接上配置的错误处理模式。更多说明请参阅 PDO 错误处理文档。
$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 "没有错误。";
}
// 没有错误。