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 错误。