bindColumn()

1. 定义

该方法将指定列的值绑定到一个变量。 成功时返回 TRUE,失败则返回 FALSE。

注:

  • 在执行 PDO 有关列的信息并不总是可用的,故此应在PDOStatement::execute()执行之后再使用该方法
  • 有个例外是,使用PgSQL数据库驱动绑定LOB列作为时,应该在执行之前使用该方法,否则大对象OID将总是返回一个整数
  • 每次调用PDOStatement::fetch()PDOStatement::fetchAll()时都会更新绑定变量的值

2. 语法

PDOStatement::bindColumn ( mixed $column , mixed &$param [, int $type [, int $maxlen [, mixed $driverdata ]]] ) : bool

3. 参数说明

参数 可选性 数据类型 描述
$column 必需 mixed 列序号或列名,列序号从 1 开始
&$param 必需 mixed 变量名称,注意,这里只能是变量,而不能是常量或其他值
$type 可选 整型或常量 通过PDO::PARAM_*常量指定的参数数据类型
$maxlen 可选 整型或常量 预分配最大长度
$driverdata 可选 mixed 数据库驱动可选参数

4. 示例

<?php

// PDOStatement::bindColumn()
// 将指定列的值绑定到一个变量

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`,`cover_x` FROM `movie` ORDER BY `rate` LIMIT 5';
    $stmt = $conn->prepare($sql);
    // $stmt->setFetchMode(PDO::FETCH_BOUND);// 将结果集中的列值分配给使用`PDOStatement::bindColumn()`方法绑定到的 PHP 变量
    $stmt->execute();

    // 开始绑定列
    $stmt->bindColumn('name', $name);
    $stmt->bindColumn('rate', $rate);
    $stmt->bindColumn(3, $cover);

    while($row = $stmt->fetch()) {
        echo "电影《 $name 》封面宽 $cover px,在豆瓣获得了高达 $rate 的评分","\n";
    }
} catch (Exception $e) {
    echo "发生了错误:", $e->getMessage();
}
/* 输出:
电影《 无名之辈 》封面宽 1429 px,在豆瓣获得了高达 8.1 的评分
电影《 复仇者联盟3:无限战争 》封面宽 1968 px,在豆瓣获得了高达 8.1 的评分
电影《 你的名字。 》封面宽 1428 px,在豆瓣获得了高达 8.4 的评分
电影《 复仇者联盟4:终局之战 》封面宽 3000 px,在豆瓣获得了高达 8.5 的评分
电影《 头号玩家 》封面宽 2000 px,在豆瓣获得了高达 8.7 的评分
*/

5. 延展阅读