PDOStatement::bindColumn
(PHP 5 >= 5.1.0, PHP 7, PHP 8, PECL pdo >= 0.1.0)
PDOStatement::bindColumn — 绑定一列到一个 PHP 变量
说明
mixed
$column
,mixed
&$param
,int
$type
= ?,int
$maxlen
= ?,mixed
$driverdata
= ?): bool
安排一个特定的变量绑定到一个查询结果集中给定的列。每次调用 PDOStatement::fetch() 或 PDOStatement::fetchAll() 都将更新所有绑定到列的变量。
注意:
在语句执行前 PDO 有关列的信息并非总是可用,可移植的应用应在 PDOStatement::execute() 之后 调用此函数(方法)。
但是,当使用 PgSQL 驱动 时,要想能绑定一个 LOB 列作为流,应用程序必须在调用 PDOStatement::execute() 之前 调用此方法,否则大对象 OID 作为一个整数返回。
参数
-
column
-
结果集中的列号(从1开始索引)或列名。如果使用列名,注意名称应该与由驱动返回的列名大小写保持一致。
-
param
-
将绑定到列的 PHP 变量名称
-
type
-
通过 PDO::PARAM_* 常量指定的参数的数据类型。
-
maxlen
-
预分配提示。
-
driverdata
-
驱动的可选参数。
返回值
成功时返回 true
, 或者在失败时返回 false
。
范例
示例 #1 把结果集输出绑定到 PHP 变量
绑定结果集中的列到PHP变量是一种使每行包含的数据在应用程序中立即可用的有效方法。下面的例子演示了 PDO 怎样用多种选项和缺省值绑定和检索列。
<?php
function readData($dbh) {
$sql = 'SELECT name, colour, calories FROM fruit';
try {
$stmt = $dbh->prepare($sql);
$stmt->execute();
/* 通过列号绑定 */
$stmt->bindColumn(1, $name);
$stmt->bindColumn(2, $colour);
/* 通过列名绑定 */
$stmt->bindColumn('calories', $cals);
while ($row = $stmt->fetch(PDO::FETCH_BOUND)) {
$data = $name . "\t" . $colour . "\t" . $cals . "\n";
print $data;
}
}
catch (PDOException $e) {
print $e->getMessage();
}
}
readData($dbh);
?>
以上例程会输出:
apple red 150 banana yellow 175 kiwi green 75 orange orange 150 mango red 200 strawberry red 25
参见
- PDOStatement::execute() - 执行一条预处理语句
- PDOStatement::fetch() - 从结果集中获取下一行
- PDOStatement::fetchAll() - 返回一个包含结果集中所有行的数组
- PDOStatement::fetchColumn() - 从结果集中的下一行返回单独的一列。

User Contributed Notes 1 note
I wanted to efficiently bind columns and then put everything into one array.
<?php
$columns = array(
'DEVICE_CONFIG' => '',
'CONSUMABLE_INFO' => '',
'DEVICE_UNIQUE_ID' => '',
'STATUS' => '',
'STATUS_MESSAGE' => '',
'LAST_MESSAGE_TIME' => '',
'DEVICE_DESCRIPTION' => ''
);
$statement = $this->connection->prepare($sql);
$statement->execute();
$x = 1;
foreach($columns as $column => $index){
$$column = $index;
eval('$statement->bindColumn(' . $x++ . ', $' . $column . ');');
}
$output= array();
while($statement->fetch(\PDO::FETCH_BOUND)){
$temp = array();
foreach($columns as $columnName => $val){
eval("\$data = \$$columnName;");
$temp[$columnName] = $data;
}
$output[] = $temp;
}
?>
备份地址:http://www.lvesu.com/blog/php/pdostatement.bindcolumn.php