淘先锋技术网

首页 1 2 3 4 5 6 7

PHP PDO ErrorInfo – 介绍和实例

PHP PDO 提供了一个用于获取任何 PDO 操作错误信息的方法。它是PDO类的方法之一,并且可以应用于任何 PDO 预处理状态句柄。该方法会返回一个包含出错信息的数组,其中必含 3 个元素,每个元素都带有相关信息。

下面是一段短小的 PDO 错误示例,其中我们尝试连接数据库时打印查询失败的相关信息:

try {
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
} catch (PDOException $e) {
print "Error!: " . $e->getMessage() . " br/>";
die();
}

在这里,如果我们使用了一个错误的用户名、密码或者用不可用的数据库,连接就会失败。这时候,错误提示会自己输出 pdo 错误信息。它的输出结果可以是类似于下面这样的提示:

Error!: SQLSTATE[HY000] [1045] Access denied for user 'username'@'localhost' (using password: YES)

除了上面这个例子中捕获的PDOException以外,无论何时使用PDO处理数据库操作时发生错误,都会返回一个错误码。您可以使用 PDO Errorinfo 来执行此操作,如下所示:

$stmt = $dbh->prepare("SELECT * FROM test WHERE id = ?");
if ($stmt->execute( array( $id ))) {
while ( $row = $stmt->fetch( PDO::FETCH_ASSOC ) ) {
var_dump($row);
}
}
$err = $stmt->errorInfo();
if ($err[0] !== PDO::ERR_NONE) {
web_log('PDO Error: ' . $err[2] . '(', $err[0], ')');
}

在上述示例中,我们在查询执行后检查错误信息。如果$stmt->execute返回一个操作失败代码,我们将从$stmt->errorInfo()数组中获得错误信息,然后将它们以易于阅读的方式记录在日志中。

这个errorInfo()数组就是我们这里要介绍的 PDO 错误信息传回的具体解释信息。

errorInfo() 返回 PDOStatement 类的对象。您检索出其中所有错误的信息可以如下:

  • $errCode = $stmt->errorInfo()[0];
  • $errMSG = $stmt->errorInfo()[1];
  • $errInfo = $stmt->errorInfo()[2]; //错误信息本身

每一个元素都是 PDOStatement 对象数组,它的意义如下:

  • 元素0 - SQLSTATE (错误代码) 错误状态码如 SQLSTATE[HY000],每个类型语句会有不同的状态码。
  • 元素1 - 错误代码信息,对于数据库厂商本身的错误信息(例如 MySQL 返回的错误代码)。
  • 元素2 - 错误信息本身。

错误信息数组可以非常有用和紧凑。你可以立即获得错误信息细节(尤其是在调试时)或在日常使用中查看确切的错误信息(log 文件、调试日志和资源)。

总之,您可以在 PHP PDO 中使用 errorInfo() 获取 PDO 数据库操作的错误信息。无论您需要在代码中以何种方式记录错误信息,PDO ErrorInfo 都是一个非常有用的工具。所以,明确 PDO 错误信息的数组的每个元素的意义,就可以开始记录和调试 PDO 错误。