getColumnMeta()

1. 定义

该方法返回 PDO 结果集中某一列的元数据的关联数组。 如果请求的结果集或列号并不存在,则返回 FALSE。

注:

  • 该方法为实验性质,在未来可能会被修改而不另行通知,请慎用
  • 并非所有 PDO 数据库驱动都支持该方法
  • 列号从 0 开始

2. 语法

PDOStatement::getColumnMeta ( int $column ) : array

3. 参数说明

参数 可选性 数据类型 描述
$column 必需 整型 列序号

其中,该方法返回的列元数据包括以下值:

  • native_type:列值的 PHP 原生类型(数据的基本类型)
  • driver:decl_type:列值在数据库中的 SQL 类型(例如,datetime)
  • flags:列标记
  • name:数据库列名
  • table:该列所在的数据库表名
  • len:该列的长度,除浮点小数外通常为 -1
  • precision:该列的数值精度,除浮点小数外通用为 0
  • pdo_type:以PDO::PARAM_*常量为代表的列类型

4. 示例

<?php

// PDOStatement::getColumnMeta()
// 返回 PDO 结果集中某一列的元数据的关联数组

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 = 'SELECT `rate`,`name` FROM `movie` ORDER BY `id` LIMIT 2';
    $stmt = $conn->prepare($sql);
    $stmt->setFetchMode(PDO::FETCH_ASSOC);// 结果集为 以列名为索引的关联数组
    $stmt->execute();
    var_dump($stmt->getColumnMeta(0));
    /* 输出:
    array(7) {
      ["native_type"]=>
      string(5) "FLOAT"
      ["pdo_type"]=>
      int(2)
      ["flags"]=>
      array(2) {
        [0]=>
        string(8) "not_null"
        [1]=>
        string(12) "multiple_key"
      }
      ["table"]=>
      string(5) "movie"
      ["name"]=>
      string(4) "rate"
      ["len"]=>
      int(2)
      ["precision"]=>
      int(1)
    }
    */
} catch (Exception $e) {
    echo "发生了错误:", $e->getMessage();
}

5. 延展阅读