PHP マニュアル
前のページ |  | 次のページ

# PDOStatement->fetch()

(no version information, might be only in CVS)

PDOStatement->fetch() -- 結果セットから次の行を取得する

## 説明

class PDOStatement {
mixed fetch ( [int fetch_style [, int cursor_orientation [, int cursor_offset]]] )
}

PDOStatementオブジェクトに関連付けられた結果セットから1行取得します。 `fetch_style` パラメータは、PDO がその行をどの様に返すかを決定します。

## パラメータ

`fetch_style`

  次のレコードを呼び出し元に返す方法を制御します。 この値は、`PDO::FETCH_*` 定数のどれかで、 `PDO::FETCH_BOTH`がデフォルトです。

  - `PDO::FETCH_ASSOC`: は、結果セットに 返された際のカラム名で添字を付けた配列を返します。

  - `PDO::FETCH_BOTH` (デフォルト): 結果セットに返された際のカラム名と 0 で始まるカラム番号で添字を付けた配列を返します。

  - `PDO::FETCH_BOUND`: `TRUE` を返し、結果セットのカラムの値を PDOStatement->bindParam()メソッドで バインドされたPHP変数に代入します。

  - `PDO::FETCH_CLASS`: 結果セットのカラムがクラス内の名前付けされたプロパティに マッピングされている、要求されたクラスの新規インスタンスを返します。 `fetch_style` に PDO::FETCH_CLASSTYPE が 含まれている場合 (例: `PDO::FETCH_CLASS | PDO::FETCH_CLASSTYPE`) は、最初のカラムの値から クラス名を決定します。

  - `PDO::FETCH_INTO`: 結果セットのカラムがクラス内の名前付けされたプロパティに マッピングされている要求された既存インスタンスを更新します。

  - `PDO::FETCH_LAZY`: `PDO::FETCH_BOTH` と`PDO::FETCH_OBJ`の 組合せで、オブジェクト変数名を作成します。

  - `PDO::FETCH_NUM`: 結果セットに返された際の 0 から始まるカラム番号を添字とする配列を返します。

  - `PDO::FETCH_OBJ`: 結果セットに返された際のカラム名と同名のプロパティを有する 匿名のオブジェクトを返します。

`cursor_orientation`

  スクロール可能なカーソルを表す PDOStatement オブジェクトの場合、 この値により呼び出し側に返される行を定義します。 この値は、`PDO::FETCH_ORI_*` 定数のどれかと する必要があり、 `PDO::FETCH_ORI_NEXT` がデフォルトとなっています。 PDOStatement に対してスクロール可能なカーソルを要求するためには、 PDO->prepare() を用いて SQL ステートメントを 準備する際、 `PDO::CURSOR_SCROLL` に `PDO::ATTR_CURSOR` 属性を設定する必要があります。

`offset`

  スクロール可能なカーソルを表すPDOStatementオブジェクトの場合で、 `cursor_orientation`パラメータが `PDO::FETCH_ORI_ABS`に設定された場合、この値により 取得される結果セットの行の絶対位置が指定されます。

  スクロール可能なカーソルを表すPDOStatementオブジェクトの場合で、 `cursor_orientation`パラメータが `PDO::FETCH_ORI_REL`に設定された場合、この値は、 PDOStatement->fetch() がコールされる前のカーソルの 位置を基準として取得する行の位置を指定します。

## 例

例 1. 異なる取得方法で行を取得する

`<?php
$sth = $dbh->prepare("SELECT name, colour FROM fruit");
$sth->execute();
/* Exercise PDOStatement::fetch styles */
print("PDO::FETCH_ASSOC: ");
print("Return next row as an array indexed by column name\n");
$result = $sth->fetch(PDO::FETCH_ASSOC);
print_r($result);
print("\n");
print("PDO::FETCH_BOTH: ");
print("Return next row as an array indexed by both column name and number\n");
$result = $sth->fetch(PDO::FETCH_BOTH);
print_r($result);
print("\n");
print("PDO::FETCH_LAZY: ");
print("Return next row as an anonymous object with column names as properties\n");
$result = $sth->fetch(PDO::FETCH_LAZY);
print_r($result);
print("\n");
print("PDO::FETCH_OBJ: ");
print("Return next row as an anonymous object with column names as properties\n");
$result = $sth->fetch(PDO::FETCH_OBJ);
print $result->NAME;
print("\n");
?>`

上の例の出力は以下となります。

    PDO::FETCH_ASSOC: Return next row as an array indexed by column name
    Array
    (
        [NAME] => apple
        [COLOUR] => red
    )

    PDO::FETCH_BOTH: Return next row as an array indexed by both column name and number
    Array
    (
        [NAME] => banana
        [0] => banana
        [COLOUR] => yellow
        [1] => yellow
    )

    PDO::FETCH_LAZY: Return next row as an anonymous object with column names as properties
    PDORow Object
    (
        [NAME] => orange
        [COLOUR] => orange
    )

    PDO::FETCH_OBJ: Return next row as an anonymous object with column names as properties
    kiwi

例 2. スクロール可能なカーソルで行を取得する

`<?php
function readDataForwards($dbh) {
$sql = 'SELECT hand, won, bet FROM mynumbers ORDER BY BET';
try {
$stmt = $dbh->prepare($sql, array(PDO::ATTR_CURSOR, PDO::CURSOR_SCROLL));
$stmt->execute();
while ($row = $stmt->fetch(PDO::FETCH_NUM, PDO::FETCH_ORI_NEXT)) {
$data = $row[0] . "\t" . $row[1] . "\t" . $row[2] . "\n";
print $data;
}
$stmt = null;
}
catch (PDOException $e) {
print $e->getMessage();
}
}
function readDataBackwards($dbh) {
$sql = 'SELECT hand, won, bet FROM mynumbers ORDER BY bet';
try {
$stmt = $dbh->prepare($sql, array(PDO::ATTR_CURSOR, PDO::CURSOR_SCROLL));
$stmt->execute();
$row = $stmt->fetch(PDO::FETCH_NUM, PDO::FETCH_ORI_LAST);
do {
$data = $row[0] . "\t" . $row[1] . "\t" . $row[2] . "\n";
print $data;
} while ($row = $stmt->fetch(PDO::FETCH_NUM, PDO::FETCH_ORI_PRIOR));
$stmt = null;
}
catch (PDOException $e) {
print $e->getMessage();
}
}
print "Reading forwards:\n";
readDataForwards($conn);
print "Reading backwards:\n";
readDataBackwards($conn);
?>`

上の例の出力は以下となります。

    Reading forwards:
    21    10    5
    16    0     5
    19    20    10

    Reading backwards:
    19    20    10
    16    0     5
    21    10    5

## 参考

PDO->query()
PDOStatement->fetchAll()
PDOStatement->fetchColumn()
PDO->prepare()
PDOStatement->setFetchMode()

前のページ | ホーム | 次のページ
PDOStatement->execute() | 上に戻る | PDOStatement->fetchAll()