使用 try...catch 块包裹数据库连接代码,并捕获 pdoexception 对象。在创建 pdo 实例时,必须通过第三个参数 options 将 pdo::attr_errmode 设置为 pdo::errmode_exception,这样当发生错误(如连接失败)时才会抛出异常而不是返回 false 或发出警告。

如何配置 PDO 以启用异常模式
默认情况下,PDO 处于静默模式,连接失败不会抛出异常。要改变这一行为,需要在实例化时传入配置数组。关键是将 ATTR_ERRMODE 设为 ERRMODE_EXCEPTION。如果不设置此项,后续调用 query() 等方法失败时也不会抛出异常,导致 catch 块无法捕获错误。

$dsn = 'mysql:host=localhost;dbname=test';
$user = 'root';
$pass = '';
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
];
try {
$pdo = new PDO($dsn, $user, $pass, $options);
echo "Connected successfully";
} catch (PDOException $e) {
echo "Connection failed: " . $e->getMessage();
}
如何处理连接失败后的具体错误信息
当连接因网络问题、密码错误或数据库服务未启动而失败时,PDOException 对象会包含详细的错误信息。可以通过 getMessage() 方法获取人类可读的错误描述,或通过 getCode() 获取 SQLSTATE 错误码。在实际应用中,通常记录日志而非直接输出给用户,以防止敏感信息泄露。
安装、修复、更新或打包一个基于 Python 和 PyMySQL 实现的 Windows `mysql` 命令。适用于用户希望在 PowerShell/CMD 中输入 `mysql` 时重定向到 Python 实现、需要交互式输入 MySQL 连接信息、需要同步到当前用户本地 bin 目录,或需要将该能力封装成可公开复用的 Codex skill。

$dsn = 'mysql:host=invalid_host;dbname=test';
$user = 'root';
$pass = '';
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
];
try {
$pdo = new PDO($dsn, $user, $pass, $options);
} catch (PDOException $e) {
// 实际生产中应记录日志
error_log("DB Error: " . $e->getMessage());
// 向用户显示通用错误
die("Database connection failed. Please try again later.");
}
基于程序中某个输入、条件或结果的具体问题
如果 options 中未设置 ATTR_ERRMODE,即使使用了 try...catch,new PDO() 也不会抛出异常,而是返回 false 或触发 PHP 警告。此时 catch 块不会被执行,程序会继续运行但 $pdo 变量可能为 false,导致后续操作出现不可预知的错误。因此,显式配置异常模式是捕获错误的必要前提。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










