columnCount()

1. 定义

该方法返回PDOStatement结果集中的列数。

注:

  • 只能是通过PDOStatement::query()方法或者PDOStatement::execute()方法执行后的PDOStatement结果集可以返回正确的列数
  • 而通过PDOStatement::prepare()方法返回的PDOStatement对象在调用`PDOStatement::execute()之前都无法获取正确的列数

2. 语法

PDOStatement::columnCount ( void ) : int

3. 参数说明

该方法不传入任何参数。

4. 示例

<?php

// PDOStatement::columnCount()
// 返回`PDOStatement`结果集中的列数

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

    // 使用 SELECT 语句返回结果集:2 列
    $sql = "SELECT `name`,`url` FROM `movie`";
    $stmt = $conn->prepare($sql);
    $stmt->execute();
    $count = $stmt->columnCount();
    var_dump($count); // 输出:int(2):共12条数据

    // 使用 SELECT 语句返回结果数:1 列
    $sql = "SELECT COUNT(`name`) FROM `movie`";
    $stmt = $conn->prepare($sql);
    $stmt->execute();
    $count = $stmt->columnCount();
    var_dump($count); // 输出:int(1)

    // 使用 DELETE 语句:不返回任何列
    $sql = "DELETE FROM `movie` WHERE `name`='哪吒之魔童降世'";
    $stmt = $conn->prepare($sql);
    $stmt->execute();
    $count = $stmt->columnCount();
    var_dump($count); // 输出:int(0)

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

5. 延展阅读