関数・クラス解説
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 各カラムを連想配列にします。 これがデフォルトです。
返値
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);
参考
ワード検索
※入力キーワードが、関数名・説明文・タグに含まれるものを検索関数名アルファベット別
最終更新一覧
●stristr
大文字小文字を区別せず文字列を検索し、ヒット箇所以降(あるいは以前)の文字列を返却
●stripslashes
バックスラッシュでエスケープされた文字列から、バックスラッシュを取り除く
●stripos
大文字小文字を区別せずに文字列が最初に現れる位置を取得する
●stripcslashes
addcslashes() でクォートされた文字列をアンクォートする
●strip_tags
文字列から HTML と PHP のタグを除去して返却
●strcspn
指定した文字が最初に現れる位置を調べる
●strcoll
ロケールに基づいて2つの文字列を比較し同じか(あるいは大小)を判定する
●strcmp
2つの文字列を比較し同じか(あるいは大小)を判定する
●strchr
strstr() のエイリアス
●strcasecmp
2つの文字列を比較(大文字小文字を区別せず同じとみなす)
カテゴリー一覧
PHP の振る舞いの変更
音声フォーマットの操作
認証サービス
コマンドライン関連
圧縮およびアーカイブ
暗号
データベース関連
日付および時刻関連
ファイルシステム
自然言語および文字エンコーディング
画像処理および作成
メール関連
数学
テキスト以外の MIME 型
プロセス制御
その他の基本モジュール
その他のサービス
検索エンジン用の拡張モジュール
サーバー固有のモジュール
セッション関連
テキスト処理
変数・データ型関連
ウェブサービス
Windows 用のモジュール
XML 操作
GUI用の拡張モジュール