errorInfo()

1. 定义

该方法获取与数据库最后一次操作有关的错误信息。 返回一个至少包含以下信息的数组:

  • 0:SQLSTATE 错误码,五个字母或数字组成的在 ANSI SQL 标准中定义的标识符
  • 1:数据库驱动的错误码
  • 2:数据库驱动的错误信息

注:

  • 该方法只适用于直接对 PDO 对象操作的句柄生效,如果对使用PDO::prepare()PDO::query()方法产生的 PDOStatement 对象使用则不生效,需要调用PDOStatement::errorInfo()才可以。

2. 语法

public PDO::errorInfo ( void ) : array

3. 参数说明

该方法不传入任何参数。

4. 示例

<?php

// PDO::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 {
    $stmt = $conn->prepare('INSERT INTO `no_exits`(`id`) VALUES(1)');// 查询的表格不存在
    $stmt->execute();
    var_dump($conn->errorInfo());// 不直接在 PDO 对象$conn 上操作时该方法不生效
    /* 输出:
    array(3) {
      [0]=>
      string(5) "00000"
      [1]=>
      NULL
      [2]=>
      NULL
    }
    */

    $conn->exec('INSERT INTO `no_exits`(`id`) VALUES(1)');// 查询的表格不存在
    var_dump($conn->errorInfo());
    /* 输出:
    array(3) {
      [0]=>
      string(5) "42S02"
      [1]=>
      int(1146)
      [2]=>
      string(35) "Table 'test.no_exits' doesn't exist"
    }
    */

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

5. 延展阅读