PDOStatement::bindColumn

(PHP 5 >= 5.1.0, PHP 7, PHP 8, PECL pdo >= 0.1.0)

PDOStatement::bindColumn カラムを PHP 変数にバインドする

説明

public PDOStatement::bindColumn(
    string|int $column,
    mixed &$var,
    int $type = PDO::PARAM_STR,
    int $maxLength = 0,
    mixed $driverOptions = null
): bool

PDOStatement::bindColumn() は、 クエリからの結果セット中にあるカラムにバインドされた特定の値を 取得するための準備をします。 PDOStatement::fetch() もしくは PDOStatement::fetchAll() がコールされる度に、カラムにバインドされた全ての変数は更新されます。

注意:

カラムに関する情報はステートメントが実行されるまで常に PDO から利用できないため、移植可能なアプリケーションでは PDOStatement::execute(). の 後に この関数をコールするようにしてください。

しかし、LOB カラムをストリームにバインドする際に PgSQL ドライバ を使用するときには、 このメソッドを PDOStatement::execute()前に コールしなければなりません。 そうしないと、ラージオブジェクトの OID が integer で返されます。

パラメータ

column

結果セット中のカラム番号 (1 から始まる) を指定します。 カラム名を使用する場合、 ドライバによって返されるカラムの大文字小文字が一致する必要が あることをご承知おきください。

var

カラムがバインドされる PHP 変数名を指定します。

type

パラメータのデータ型を PDO::PARAM_* 定数 で指定します。

maxLength

領域を事前に確保するためのヒント。

driverOptions

ドライバのオプションパラメータ。

戻り値

成功した場合に true を、失敗した場合に false を返します。

エラー / 例外

PDO::ATTR_ERRMODEPDO::ERRMODE_WARNING に設定されていた場合、E_WARNING レベルのエラーが発生します。

PDO::ATTR_ERRMODEPDO::ERRMODE_EXCEPTION に設定されていた場合、PDOException がスローされます。

例1 バインドした結果セットを PHP 変数に出力する

PHP 変数にバインドしている結果セットのカラムは、 アプリケーションで利用可能な各行に含まれるデータを作成するための 効果的な方法です。 以下のサンプルは、どうやって PDO が様々なオプションやを理にかなったデフォルト値を用いて カラムをバインド、取得するかを例示しています。

<?php
$stmt
= $dbh->prepare('SELECT name, colour, calories FROM fruit');
$stmt->execute();

/* カラム番号によってバインドする */
$stmt->bindColumn(1, $name);
$stmt->bindColumn(2, $colour);

/* カラム名によってバインドする */
$stmt->bindColumn('calories', $cals);

while (
$stmt->fetch(PDO::FETCH_BOUND)) {
print
$name . "\t" . $colour . "\t" . $cals . "\n";
}
?>

上の例の出力は、 たとえば以下のようになります。

apple   red     150
banana  yellow  175
kiwi    green   75
orange  orange  150
mango   red     200
strawberry      red     25

参考

add a note add a note

User Contributed Notes 1 note

up
0
Moses Blumenstiel
3 years ago
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;
        } 
?>
To Top