在 PHP 中使用 PDO(PHP Data Objects)进行数据库操作时,exec() 方法常用于执行不返回结果集的 SQL 语句,例如 INSERT、UPDATE、DELETE 等。但在开发和调试过程中,往往需要更详细的错误信息来排查问题。本文将介绍如何在使用 PDO::exec 时开启并查看详细的错误报告。
PDO::exec 方法执行一条 SQL 语句,并返回受影响的行数。如果执行失败,它返回 false。但默认情况下,错误信息不会自动输出,需要手动开启错误模式并获取错误详情。
<?php
$pdo = new PDO('mysql:host=m66.net;dbname=testdb;charset=utf8', 'username', 'password');
$sql = "UPDATE users SET status = 'active' WHERE id = 10";
$result = $pdo->exec($sql);
if ($result === false) {
echo "执行失败,但没有详细错误信息。";
} else {
echo "影响了 {$result} 行。";
}
?>
PDO 支持多种错误处理模式,最常用的有:
PDO::ERRMODE_SILENT:默认模式,不抛出错误,只记录错误代码。
PDO::ERRMODE_WARNING:触发 PHP 警告。
PDO::ERRMODE_EXCEPTION:抛出异常。
我们推荐使用 PDO::ERRMODE_EXCEPTION,这样可以通过捕获异常获得详细的错误信息。
<?php
try {
$pdo = new PDO('mysql:host=m66.net;dbname=testdb;charset=utf8', 'username', 'password');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "UPDATE users SET status = 'active' WHERE id = 10";
$result = $pdo->exec($sql);
echo "影响了 {$result} 行。";
} catch (PDOException $e) {
echo "执行出错: " . $e->getMessage();
}
?>
如果你不使用异常模式,可以通过以下方法查看错误信息:
<?php
$pdo = new PDO('mysql:host=m66.net;dbname=testdb;charset=utf8', 'username', 'password');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT);
$sql = "UPDATE users SET status = 'active' WHERE id = 10";
$result = $pdo->exec($sql);
if ($result === false) {
$errorInfo = $pdo->errorInfo();
echo "错误代码: " . $errorInfo[0] . "<br>";
echo "驱动错误代码: " . $errorInfo[1] . "<br>";
echo "错误信息: " . $errorInfo[2];
} else {
echo "影响了 {$result} 行。";
}
?>
errorInfo() 返回一个数组:
[0] SQLSTATE 错误代码(标准错误码)
[1] 驱动特定错误代码
[2] 驱动具体错误消息
调试阶段建议开启 PDO::ERRMODE_EXCEPTION,方便捕获异常并定位错误。
生产环境考虑捕获异常后进行日志记录,避免直接输出错误信息给用户。
确认数据库连接字符集设置正确,避免因字符编码导致的错误。
使用预处理语句(prepare + execute)以防止 SQL 注入,同时也便于错误排查。
通过上述方法,你可以在使用 PDO::exec 时轻松开启并查看详细的错误报告,有效提升调试效率,快速定位问题。
相关标签:
PDO