errorInfo()

1. 定义

该方法返回数据库上一次操作的错误信息数组。

注:

  • 返回的信息包含以下几个方面:

    • 0:SQLSTATE 错误码,五个字母或数字组成的在 ANSI SQL 标准中定义的标识符
    • 1:数据库驱动的错误码
    • 2:数据库驱动的错误信息
  • 该方法只适用于直接对 PDOStatement 对象操作的句柄生效,PDO 对象则可以使用PDO::errorInfo()方法

2. 语法

PDOStatement::errorInfo ( void ) : array

3. 参数说明

该方法不传入任何参数。

4. 示例

<?php

// PDOStatement::errorInfo()
// 返回数据库上一次操作的错误信息数组

try {
    $config = ['driver' => 'mysql', 'host' => 'localhost', 'dbname' => 'test', 'charset' => 'utf8', 'user' => 'root', 'pwd' => 'mysql'];
    $dsn = sprintf('%s:host=%s;dbname=%s;charset=%s', $config['driver'], $config['host'], $config['dbname'], $config['charset']);
    $conn = new PDO($dsn, $config['user'], $config['pwd']);
} catch (PDOException $e) {
    error_log($e->getMessage()); // 将错误信息记录至日志
    echo $e->getMessage();
}

try {
    // 获取 PDO 对象的错误码
    $conn->exec('INSERT INTO `no_exits`(`id`) VALUES(1)'); // 查询的表格不存在
    var_dump($conn->errorCode()); // 输出:string(5) "42S02"
    var_dump($conn->errorInfo());
    /* 输出:
    array(3) {
      [0]=>
      string(5) "42S02"
      [1]=>
      int(1146)
      [2]=>
      string(35) "Table 'test.no_exits' doesn't exist"
    }
    */
    // 获取 PDOStatement 对象的错误码
    $stmt = $conn->prepare('INSERT INTO `no_exits`(`id`) VALUES(1)'); // 查询的表格不存在
    $stmt->execute();
    var_dump($stmt->errorCode()); // 输出:string(5) "42S02"
    var_dump($stmt->errorInfo());
    /* 输出:
    array(3) {
      [0]=>
      string(5) "42S02"
      [1]=>
      int(1146)
      [2]=>
      string(35) "Table 'test.no_exits' doesn't exist"
    }
    */

    // 获取 SQL 预处理语句的错误码:无效
    $stmt = $conn->prepare('DELETE FROM `movie` WHERE `id` > 0 LIMIT 1'); // 没有错误
    var_dump($stmt->errorCode()); // 输出:NULL
    // 获取 PDOStatement 对象的错误码
    $stmt = $conn->query('DELETE FROM `movie` WHERE `id` > 0 LIMIT 1'); // 没有错误
    var_dump($stmt->errorCode()); // 输出:string(5) "00000"
    var_dump($stmt->errorInfo());
    /* 输出:
    array(3) {
      [0]=>
      string(5) "00000"
      [1]=>
      NULL
      [2]=>
      NULL
    }
    */

} catch (Exception $e) {
    echo "发生了错误:", $e->getMessage();
}

5. 延展阅读