3

我正在使用 PHP 和 PDO 连接到我的 MySQL 数据库。我配置了 PDO 连接,以便将任何 MySQL 错误作为异常抛出:

$dbConnection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

现在假设我执行了一个生成错误的 MySQL 命令并捕获了它,错误消息是这样的:

SQLSTATE [23000]:违反完整性约束:1048 列“名称”不能为空

当我使用$exception->getCode()它时23000,我认为它来自 PHP 或其他东西。如何1048在 catch 块中获取特定的 MySQL 错误 ()?

4

2 回答 2

7

PDOException对象有一个属性errorInfo,它是一个三元素数组,同样由PDO::errorInfo(). MySQL 错误代码是元素 1。

try {
    . . .
} catch (PDOException $e)
    $errorInfo = $e->errorInfo;
    error_log "MySQL error " . $errorInfo[1] . "\n";
}

PS:请注意,仅仅回显错误不是正确的异常处理,我这样做只是为了展示如何访问信息。

于 2013-04-12T01:07:40.283 回答
3

由于您使用的是 PDO,因此可以参考这里,它提供了关于如何从 SQL 获取错误信息的出色描述和示例。

于 2013-04-12T01:06:23.640 回答