errorCode()

1. 定义

该方法获取数据库上一次操作的错误码。 返回值由五个字母或数字组成的在 ANSI SQL 标准中定义的标识符,前两个字符为类值,后三个字符为子类值。

如果未在数据库操作句柄发生操作或者未发生任何错误时,将返回00000

注:

  • PDO::errorCode()不同的是,该方法仅取PDOStatement对象的错误码

2. 语法

PDOStatement::errorCode ( void ) : string

3. 参数说明

该方法不传入任何参数。

4. 示例

<?php

// PDOStatement::errorCode()
// 获取数据库上一次操作的错误码

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"
    // 获取 PDOStatement 对象的错误码
    $stmt = $conn->prepare('INSERT INTO `no_exits`(`id`) VALUES(1)'); // 查询的表格不存在
    $stmt->execute();
    var_dump($stmt->errorCode()); // 输出:string(5) "42S02"

    // 获取 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"

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

5. 延展阅读