rowCount()

1. 定义

该方法返回数据库受上一个 SQL 语句影响的行数。

注:

  • 该方法仅对INSERTUPDATEDELETE语句有效
  • INSERT ... ON DUPLICATE KEY UPDATE子句有不确定结果,不建议使用
  • 大多数数据库不能返回受SELECT子句影响的行数

2. 语法

PDOStatement::rowCount ( void ) : int

3. 参数说明

该方法不传入任何参数。

4. 示例

<?php

// PDOStatement::rowCount()
// 返回数据库受上一个 SQL 语句影响的行数

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 {
    // 插入一条正确的数据:返回 1
    $sql = "INSERT INTO `movie`(`name`) VALUES ('哪吒之魔童降世')";
    $stmt = $conn->prepare($sql);
    $stmt->execute();
    $count = $stmt->rowCount();
    var_dump($count); // 输出:int(1)

    // 插入一条错误的(ID已存在)的数据:返回 0
    $sql = "INSERT INTO `movie`(`id`, `name`) VALUES (1, '哪吒之魔童降世')";
    $stmt = $conn->prepare($sql);
    $stmt->execute();
    $count = $stmt->rowCount();
    var_dump($count); // 输出:int(0)

    // 使用 INSERT ... ON DUPLICATE KEY UPDATE 子句(插入数据发生冲突时更新数据)
    $sql = "INSERT INTO `movie`(`id`, `name`) VALUES (1, '更新之后的数据') ON DUPLICATE KEY UPDATE `id`=1, `name`='更新之后的数据';";
    $stmt = $conn->prepare($sql);
    $stmt->execute();
    $count = $stmt->rowCount();
    var_dump($count); // 输出:int(0)

    // 更新一条不改变任何值的记录:返回 0
    $sql = "UPDATE `movie` SET `name` = '泰坦尼克号', `rate` = 9.4, `url` = 'https://movie.douban.com/subject/1292722/', `cover` = 'https://img3.doubanio.com/view/photo/s_ratio_poster/public/p457760035.jpg', `cover_x` = 2015, `cover_y` = 3000 WHERE `id` = 10";
    $stmt = $conn->prepare($sql);
    $stmt->execute();
    $count = $stmt->rowCount();
    var_dump($count); // 输出:int(0)

    // 【慎】使用 SELECT 语句
    $sql = "SELECT `name`,`url` FROM `movie`";
    $stmt = $conn->prepare($sql);
    $stmt->execute();
    $count = $stmt->rowCount();
    var_dump($count); // 输出:int(12):共12条数据

    // 【慎】使用 SELECT 语句
    $sql = "SELECT COUNT(`name`) FROM `movie`";
    $stmt = $conn->prepare($sql);
    $stmt->execute();
    $count = $stmt->rowCount();
    var_dump($count); // 输出:int(1)

    // 使用 DELETE 语句
    $sql = "DELETE FROM `movie` WHERE `name`='哪吒之魔童降世'";
    $stmt = $conn->prepare($sql);
    $stmt->execute();
    $count = $stmt->rowCount();
    var_dump($count); // 输出:int(1)

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

5. 延展阅读