2024 日本 PHP 研討會

oci_fetch_object

(PHP 5, PHP 7, PHP 8, PECL OCI8 >= 1.1.0)

oci_fetch_object將查詢的下一列作為物件傳回

說明

oci_fetch_object(資源 $statement, int $mode = OCI_ASSOC | OCI_RETURN_NULLS): stdClass|false

傳回一個物件,包含查詢的下一筆結果集列。物件的每個屬性對應到列的一個欄位。此函式通常在迴圈中呼叫,直到它傳回 false,表示已無更多列。

關於 OCI8 延伸模組執行的資料類型映射的詳細資訊,請參閱 驅動程式支援的資料類型

參數

statement

oci_parse() 建立並由 oci_execute() 執行的有效 OCI8 陳述識別碼,或 REF CURSOR 陳述識別碼。

傳回值

傳回一個物件。物件的每個屬性對應到列的一個欄位。如果 statement 中沒有更多列,則傳回 false

任何 LOB 欄位都會以 LOB 描述符的形式傳回。

DATE 欄位會以格式化為目前日期格式的字串傳回。預設格式可以使用 Oracle 環境變數(例如 NLS_LANG)或先前執行的 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, '炸魚薯條');
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
// 炸魚薯條

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, '冰咖啡');
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
// 冰咖啡

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, '一段很長的字串');
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
// 一段很長的

oci_free_statement($stid);
oci_close($conn);

?>

另請參閱

新增註釋

使用者貢獻的註釋 1 則註釋

juanloman at hilfetech dot com
12 年前
請注意,您仍然可以使用此範例中所示的大括號語法來引用名稱非常複雜的欄位

<?php

$queryStr
= 'SELECT COUNT(*) FROM FOOBAR'; // 複雜的名稱!
// 解析並執行...
$queryObj = oci_fetch_object($quertStmt);

echo
'Count: ' . $queryObj->{'COUNT(*)'}; // 大括號語法參考

?>
To Top