(PHP 5, PHP 7, PHP 8, PECL OCI8 >= 1.1.0)
oci_fetch_object — クエリの次の行をオブジェクトとして返す
$statement, int $mode = OCI_ASSOC | OCI_RETURN_NULLS): stdClass|false
クエリから、結果セットの次の行を含むオブジェクトを返します。
オブジェクトの各属性が行の各カラムをあらわします。
この関数の典型的な使い方は、ループの中で false を返すまでコールすることです。
false は、もう行がないことを意味します。
OCI8 拡張モジュールによるデータ型マッピングの 詳細については、ドライバが サポートするデータ型 を参照ください。
statementREF
CURSOR ステートメント ID。
オブジェクトを返します。
オブジェクトの属性は文中のフィールドと一致しています。
statement にもう行がない場合は false を返します。
LOB カラムは LOB ディスクリプタを返します。
DATE カラムは、現行のデータフォーマットにフォーマットされた
文字列として返されます。既定のフォーマットは NLS_LANG
のような Oracle 環境変数で変更したり、またはあらかじめ
ALTER SESSION SET NLS_DATE_FORMAT コマンドを実行して変更します。
Oracle のデフォルトでは、文字の大小を区別しないカラム名はすべて大文字となります。 文字の大小を区別するカラム名は、属性の名前もそれと同じになります。 結果のオブジェクト配列を var_dump() すれば、 属性にアクセスするための大文字小文字の区別を確かめられます。
NULL データ・フィールドの全てに対して、属性の値は null になります。
例1 oci_fetch_object() の例
<?php
/*
実行する前にテーブルを作成します。
CREATE TABLE mytab (id NUMBER, description VARCHAR2(30));
INSERT INTO mytab (id, description) values (1, 'Fish and Chips');
COMMIT;
*/
$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 id, description FROM mytab');
oci_execute($stid);
while (($row = oci_fetch_object($stid)) != false) {
// 標準的な Oracle カラム それぞれに対して大文字の属性名を使います
echo $row->ID . "<br>\n";
echo $row->DESCRIPTION . "<br>\n";
}
// 出力です。
// 1
// Fish and Chips
oci_free_statement($stid);
oci_close($conn);
?>
例2 文字の大小を区別するカラム名を持つ oci_fetch_object()
<?php
/*
実行する前に、文字の大小を区別するカラム名を持つテーブルを作成します。
CREATE TABLE mytab (id NUMBER, "MyDescription" VARCHAR2(30));
INSERT INTO mytab (id, "MyDescription") values (1, 'Iced Coffee');
COMMIT;
*/
$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 id, "MyDescription" FROM mytab');
oci_execute($stid);
while (($row = oci_fetch_object($stid)) != false) {
// 標準的な Oracle カラム それぞれに対して大文字の属性名を使います
echo $row->ID . "<br>\n";
// 文字の大小を区別するカラム名と同じケースを使います
echo $row->MyDescription . "<br>\n";
}
// 出力です。
// 1
// Iced Coffee
oci_free_statement($stid);
oci_close($conn);
?>
例3 LOB を持つ oci_fetch_object()
<?php
/*
実行する前にテーブルを作成します。
CREATE TABLE mytab (id NUMBER, description CLOB);
INSERT INTO mytab (id, description) values (1, 'A very long string');
COMMIT;
*/
$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 id, description FROM mytab');
oci_execute($stid);
while (($row = oci_fetch_object($stid)) != false) {
echo $row->ID . "<br>\n";
// 下記では、 DESCRIPTION から最初の 11 バイトを出力します
echo $row->DESCRIPTION->read(11) . "<br>\n";
}
// 出力です。
// 1
// A very long
oci_free_statement($stid);
oci_close($conn);
?>