本文共 3184 字,大约阅读时间需要 10 分钟。
PDO数据库连接错误处理模式解析
1. 默认模式(PDO::ERRMODE_SILENT)
在默认模式下,PDOStatement对象的errorCode属性会被设置,但不会产生任何警告或异常。
这种模式适用于需要手动检查数据库操作结果的场景。
$dbms = 'mysql'; $dbName = 'admin'; $user = 'root'; $pwd = 'password'; $host = 'localhost'; $dsn = "[$dbms:host=$host;port=3306;dbname=$dbName]"; $pdo = new PDO($dsn, $user, $pwd); $query = "INSERT INTO user (username, password) VALUES('admin')"; $res = $pdo->prepare($query); $res->execute(); $code = $res->errorCode(); if ($code == 00000) { echo "数据插入成功"; } else { echo "数据库错误:"; echo "SQL Query: " . $query; echo "错误信息:" . var_dump($res->errorInfo()) . ""; }执行结果示例:
21S01 数据库错误:表'admin.user'中缺少列2. 警告模式(PDO::ERRMODE_WARNING)
在警告模式下,PDO会生成一个PHP警告,并设置errorCode属性,但不会抛出异常。
这种模式适用于需要获取详细错误信息但仍希望程序继续执行的场景。
$dbms = 'mysql'; $dbName = 'admin'; $user = 'root'; $pwd = 'password'; $host = 'localhost'; $dsn = "[$dbms:host=$host;port=3306;dbname=$dbName]"; try { $pdo = new PDO($dsn, $user, $pwd); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING); $query = "SELECT * FROM userrr"; $res = $pdo->prepare($query); $res->execute(); while ($result = $res->fetch(PDO::FETCH_ASSOC)) { echo $result['id'] . " " . $result['username'] . " " . $result['password']; } } catch (PDOException $e) { die("ERROR!:" . $e->getMessage()); } echo "继续运行脚本";执行结果示例:
Warning: PDOStatement::execute() []: SQLSTATE[42S02]: 未找到基础表或视图:1146 表'admin.userrr'不存在继续运行脚本将执行完毕
3. 异常模式(PDO::ERRMODE_EXCEPTION)
在异常模式下,PDO会抛出一个PDOException异常,并设置errorCode属性。
这种模式适用于需要严格控制数据库操作异常的场景,通常用于需要完整错误信息以便调试的环境。
$dbms = 'mysql'; $dbName = 'admin'; $user = 'root'; $pwd = 'password'; $host = 'localhost'; $dsn = "[$dbms:host=$host;port=3306;dbname=$dbName]"; try { $pdo = new PDO($dsn, $user, $pwd); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $query = "DELETE FROM userrr WHERE id=1"; $res = $pdo->prepare($query); $res->execute(); } catch (PDOException $e) { echo "PDO异常捕获:"; echo "错误描述:" . $e->getMessage(); echo "SQL语句:" . $query; echo "错误代码:" . $e->getCode() . ""; echo "错误文件:" . $e->getFile() . ""; echo "错误行号:" . $e->getLine() . ""; echo "错误跟踪:" . $e->getTraceAsString() . ""; }执行结果示例:
PDO异常捕获:错误描述:SQLSTATE[42S02]: 未找到基础表或视图:1146 表'admin.userrr'不存在错误文件:D:\wampserver\www\test\test\index1.php
错误行号:14
错误跟踪信息见上述输出
转载地址:http://zlvfk.baihongyu.com/