我正在使用PHP和PDO连接到我的MySQL数据库。我配置了PDO连接,以便我将任何MySQL错误作为异常抛出:
$dbConnection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
现在让我假设我执行一个生成错误的MySQL命令,我抓住它,错误信息是这样的:
SQLSTATE [23000]:完整性约束违规:1048列“名称”不能为空
当我使用$exception->getCode()
时,它返回23000
,我认为它来自PHP或其他东西。如何在catch块中获取特定的MySQL错误(1048
)?
答案 0 :(得分:6)
PDOException对象的属性errorInfo
是一个三元素数组,PDO::errorInfo()
返回的属性相同。 MySQL错误代码是元素1。
try {
. . .
} catch (PDOException $e)
$errorInfo = $e->errorInfo;
error_log "MySQL error " . $errorInfo[1] . "\n";
}
PS:请注意,只是回显错误不是正确的异常处理,我只是这样做以显示如何访问信息。
答案 1 :(得分:3)
由于您正在使用PDO,因此可以参考here,它提供了一个很好的描述以及如何从SQL获取错误信息的示例。