错误与错误处理
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 "没有错误。"; } // 没有错误。