関数・クラス解説

oci_fetch_all

version:PHP 5, PHP 7, PECL OCI8 >= 1.1.0 (公式)

クエリからの複数の行を二次元配列に取得する

公式リファレンス

書式

oci_fetch_all ( resource $statement , array &$output [, int $skip = 0 [, int $maxrows = -1 [, int $flags = OCI_FETCHSTATEMENT_BY_COLUMN + OCI_ASSOC ]]] ) : int|false

説明

クエリからの複数の行を二次元配列に取得します。 デフォルトでは、すべての行を返します。

この関数は、クエリを oci_execute() で実行した後でのみコールすることができます。

パラメータ

statement
oci_parse() で作成してoci_execute() で実行した有効な OCI8 ステートメント ID、あるいは REFCURSOR ステートメント ID。
output
返された行を格納する変数。 LOB 列は文字列として返されます。 Oracle は変換をサポートしています。 データや型の取得についての詳細な情報は oci_fetch_array() を参照ください。
skip
結果を取得する際に無視する行数 (デフォルトの値は 0 で、最初の行から開始されます)。
maxrows
読み込む行数。デフォルトは -1 で、これは skip + 1 番目の行以降のすべての行を意味します。
flags
パラメータ flags は、 配列の構造をあらわし、また連想配列を使うかどうかもあらわします。
oci_fetch_all() の配列構造モード
定数 説明
OCI_FETCHSTATEMENT_BY_ROW 配列の配列で、内側の配列はクエリの行単位となります。
OCI_FETCHSTATEMENT_BY_COLUMN 配列の配列で、内側の配列はクエリの列単位となります。 これがデフォルトです。
配列のインデックスには、カラム名あるいは数値を使うことができます。 結果は、どれか一つのモードでだけ返されます。
oci_fetch_all() の配列インデックスモード
定数 説明
OCI_NUM 各列の配列に数値添字を使います。
OCI_ASSOC 各カラムを連想配列にします。 これがデフォルトです。
加算演算子 "+" を使って、 配列の構造とインデックス形式の組み合わせを選択します。 Oracle のデフォルトである大文字小文字を区別しないカラム名の場合は、 配列のキーは大文字となります。大文字小文字を区別するカラム名の場合は、 配列のキーの大文字小文字は実際のカラム名と同じになります。 var_dump() で output を確認し、大文字小文字を適切に指定するようにしましょう。 同じ名前のカラムが複数あるクエリでは、カラムの別名を使わなければなりません。 そうしないと、連想配列にあらわれるのはその中の一つのカラムだけとなってしまいます。

返値

output の行数を返します。これは 0 以上の値となります。 失敗した場合に FALSE を返します.

注意

注意: skip を使うのは、非常に非効率的です。 読み飛ばす行もすべて PHP がデータベースから受け取る結果セットに含まれ、 そのあとで読み飛ばす部分が捨てられます。 それよりは、SQL を使って取得開始位置と取得範囲をはじめから指定した方がより効率的です。 oci_fetch_array() の例を参照ください。
注意: 大量の行を返すクエリでは、oci_fetch_array() のような単一行の取得関数を使ったほうがメモリを浪費せずに済みます。
注意: 大量の行を返すクエリの場合、oci8.default_prefetchを増やすかoci_set_prefetch() を使えばパフォーマンスが劇的に向上します。
注意: Oracle Database 12c の暗黙の結果セットからの行は返しません。 代わりに oci_fetch_array() を使いましょう。

サンプル

例1 oci_fetch_all() の例

$conn = oci_connect('hr', 'welcome', 'localhost/XE'); if (!$conn) {     $e = oci_error();     trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR); } $stid = oci_parse($conn, 'SELECT POSTAL_CODE, CITY FROM locations WHERE ROWNUM < 3'); oci_execute($stid); $nrows = oci_fetch_all($stid, $res); echo "$nrows rows fetched \n"; var_dump($res); // var_dump 出力は //    2 rows fetched //    array(2) { //      ["POSTAL_CODE"]=> //      array(2) { //        [0]=> //        string(6) "00989x" //        [1]=> //        string(6) "10934x" //      } //      ["CITY"]=> //      array(2) { //        [0]=> //        string(4) "Roma" //        [1]=> //        string(6) "Venice" //      } //    } // 結果を見やすく表示します echo "\n"; foreach ($res as $col) {     echo "\n";     foreach ($col as $item) {         echo "    ".($item !== null ? htmlentities($item, ENT_QUOTES) : "")."\n";     }     echo "\n"; } echo "\n"; oci_free_statement($stid); oci_close($conn);

例2 oci_fetch_all() で OCI_FETCHSTATEMENT_BY_ROW を使う例

$conn = oci_connect('hr', 'welcome', 'localhost/XE'); if (!$conn) {     $e = oci_error();     trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR); } $stid = oci_parse($conn, 'SELECT POSTAL_CODE, CITY FROM locations WHERE ROWNUM < 3'); oci_execute($stid); $nrows = oci_fetch_all($stid, $res, null, null, OCI_FETCHSTATEMENT_BY_ROW); echo "$nrows rows fetched \n"; var_dump($res); // 出力は //    2 rows fetched //    array(2) { //      [0]=> //      array(2) { //        ["POSTAL_CODE"]=> //        string(6) "00989x" //        ["CITY"]=> //        string(4) "Roma" //      } //      [1]=> //      array(2) { //        ["POSTAL_CODE"]=> //        string(6) "10934x" //        ["CITY"]=> //        string(6) "Venice" //      } //    } oci_free_statement($stid); oci_close($conn);

例3 oci_fetch_all() で OCI_NUM を使う例

$conn = oci_connect('hr', 'welcome', 'localhost/XE'); if (!$conn) {     $e = oci_error();     trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR); } $stid = oci_parse($conn, 'SELECT POSTAL_CODE, CITY FROM locations WHERE ROWNUM < 3'); oci_execute($stid); $nrows = oci_fetch_all($stid, $res, null, null, OCI_FETCHSTATEMENT_BY_ROW + OCI_NUM); echo "$nrows rows fetched \n"; var_dump($res); // 出力は //    2 rows fetched //    array(2) { //      [0]=> //      array(2) { //        [0]=> //        string(6) "00989x" //        [1]=> //        string(4) "Roma" //      } //      [1]=> //      array(2) { //        [0]=> //        string(6) "10934x" //        [1]=> //        string(6) "Venice" //      } //    } oci_free_statement($stid); oci_close($conn);

参考

  • oci_fetch() - クエリの次の行を内部バッファに取得する
  • oci_fetch_array() - クエリの次の行を連想配列あるいは数値添字配列で返す
  • oci_fetch_assoc() - クエリの次の行を連想配列で返す
  • oci_fetch_object() - クエリの次の行をオブジェクトとして返す
  • oci_fetch_row() - クエリの次の行を配列で返す
  • oci_set_prefetch() - クエリがプリフェッチする行数を設定する
  • ワード検索


    ※入力キーワードが、関数名・説明文・タグに含まれるものを検索

    関数名アルファベット別

    A B C D E F G H I J
    K L M N O P Q R S T
    U V W X Y Z _

    最終更新一覧

    stristr
     大文字小文字を区別せず文字列を検索し、ヒット箇所以降(あるいは以前)の文字列を返却

    stripslashes
     バックスラッシュでエスケープされた文字列から、バックスラッシュを取り除く

    stripos
     大文字小文字を区別せずに文字列が最初に現れる位置を取得する

    stripcslashes
     addcslashes() でクォートされた文字列をアンクォートする

    strip_tags
     文字列から HTML と PHP のタグを除去して返却

    strcspn
     指定した文字が最初に現れる位置を調べる

    strcoll
     ロケールに基づいて2つの文字列を比較し同じか(あるいは大小)を判定する

    strcmp
     2つの文字列を比較し同じか(あるいは大小)を判定する

    strchr
     strstr() のエイリアス

    strcasecmp
     2つの文字列を比較(大文字小文字を区別せず同じとみなす)

    カテゴリー一覧

    PHP の振る舞いの変更
    音声フォーマットの操作
    認証サービス
    コマンドライン関連
    圧縮およびアーカイブ
    暗号
    データベース関連
    日付および時刻関連
    ファイルシステム
    自然言語および文字エンコーディング
    画像処理および作成
    メール関連
    数学
    テキスト以外の MIME 型
    プロセス制御
    その他の基本モジュール
    その他のサービス
    検索エンジン用の拡張モジュール
    サーバー固有のモジュール
    セッション関連
    テキスト処理
    変数・データ型関連
    ウェブサービス
    Windows 用のモジュール
    XML 操作
    GUI用の拡張モジュール