2024 年 PHP Conference Japan

oci_result

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

oci_result從擷取的列傳回欄位值

說明

oci_result(資源 $statement, 字串|整數 $column): 混合

傳回 oci_fetch() 擷取的目前列中 column 的資料。

有關 OCI8 擴充套件執行的資料類型映射的詳細資訊,請參閱 驅動程式支援的資料類型

參數

statement

column

可以使用欄位編號(從 1 開始)或欄位名稱。欄位名稱的大小寫必須與 Oracle 中繼資料所描述的欄位大小寫相符,對於大小寫不敏感所建立的欄位,則為大寫。

回傳值

除了抽象類型(ROWID、LOB 和 FILE)之外,所有資料皆以字串形式回傳。發生錯誤時回傳 false

範例

範例 #1 使用 oci_fetch() 搭配 oci_result()

<?php

$conn
= oci_connect('hr', 'welcome', 'localhost/XE');
if (!
$conn) {
$e = oci_error();
trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
}

$sql = 'SELECT location_id, city FROM locations WHERE location_id < 1200';
$stid = oci_parse($conn, $sql);
oci_execute($stid);

while (
oci_fetch($stid)) {
echo
oci_result($stid, 'LOCATION_ID') . " is ";
echo
oci_result($stid, 'CITY') . "<br>\n";
}

// 顯示:
// 1000 is Roma
// 1100 is Venice

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

?>

另請參閱

  • oci_fetch_array() - 從查詢結果中回傳下一列資料,以關聯式或數字索引陣列呈現
  • oci_fetch_assoc() - 從查詢結果中回傳下一列資料,以關聯式陣列呈現
  • oci_fetch_object() - 從查詢結果中回傳下一列資料,以物件呈現
  • oci_fetch_row() - 從查詢結果中回傳下一列資料,以數字索引陣列呈現
  • oci_fetch_all() - 從查詢結果中取出多列資料,並放入二維陣列中

新增註釋

使用者提供的註釋 9 則註釋

erabbott at NOSPAMterra dot com dot br
22 年前
請注意,如果您進行多個表格選擇,則必須為每個欄位指定別名。

這將無法運作
----------------------------------------
$qry = "SELECT A.COL_ONE, B.COL_ONE FROM TABLE1 A, TABLE2 B";
$stmt = OCIParse($conn, $qry);

while(OCIFetch($stmt))
{
$a = OCIResult($stmt, "A.COL_ONE");
...
----------------------------------------

但這樣可以
----------------------------------------
$qry = "SELECT A.COL_ONE AS X, B.COL_ONE AS Y FROM TABLE1 A, TABLE2 B";
$stmt = OCIParse($conn, $qry);

while(OCIFetch($stmt))
{
$a = OCIResult($stmt, "X");
...
----------------------------------------

此致,
dominic dot standage at revolutionltd dot com
25 年前
OCIResult() 要求欄位名稱必須以大寫字母書寫,因此 OCIResult($stmt,"column") 將無法運作,但 OCIResult($stmt,"COLUMN") 可以正常運作。希望這對某些人有所幫助
luismanuelp at gmail dot com
19 年前
我正在嘗試取得字串首字元的清單。

SELECT distinct substr(version,1,1) as COL1 FROM SPHVVERS where Version is not null order by 1

這原本可以運作,但最近卻失敗了。我認為這是因為新增的一些字串現在包含數字作為首字元。

我發現要讓它運作,我必須使用 decode 語句。(To_Char 無法運作)

SELECT distinct decode (substr(version,1,1),'1','?','0','!',substr(version,1,1)) as COL1 FROM SPHVVERS where Version is not null order by 1
jthome at fcgov dot com
21 年前
僅供參考--

為了修改 Oracle 日期(使用 NLS_DATE_FORMAT...),您必須先設定 $ORACLE_HOME。這個環境變數最好在伺服器啟動腳本中設定(例如,./apachectl)

--
Jim
shayman at quiver dot com
24 年前
由於此函式會取得欄位索引的「混合」變數類型,因此您可以使用整數來表示欄位編號。在這種情況下,計數是從 1 開始,而不是從零開始。
我不確定,但我認為這種方法比使用欄位名稱稍微快一些。
有關範例,請參閱 OCINumCols 的第一個範例。
gabi at gambita dot de
21 年前
如果您想要連接兩個都具有相同欄位(例如「id」)的表格,但您不想(或不能)指定這兩個表格中的所有其他欄位(如 erabbott 提到的),您可以使用

SELECT t1.*, t2.*, t1.id AS id1, t2.id AS id2
FROM table1 t1, table2 t2;

請注意,這_不_適用

SELECT *,t1.id AS id1, t2.id AS id2
FROM table1 t1, table2 t2;
steve dot hurst at instem-lss dot co dot uk
22 年前
我正在嘗試取得字串首字元的清單。

SELECT distinct substr(version,1,1) as COL1 FROM SPHVVERS where Version is not null order by 1

這原本可以運作,但最近卻失敗了。我認為這是因為新增的一些字串現在包含數字作為首字元。

我發現要讓它運作,我必須使用 decode 語句。(To_Char 無法運作)

SELECT distinct decode (substr(version,1,1),'1','?','0','!',substr(version,1,1)) as COL1 FROM SPHVVERS where Version is not null order by 1
dwilson at cae dot wisc dot edu
23 年前
我抱怨無法從 Oracle 日期欄位取得時間。Joe Brown 說:

這不是 PHP 的錯誤。

請考慮設定 NLS_DATE_FORMAT。

手冊說明 OCIResult() 會將所有內容以字串形式返回。
NLS_DATE_FORMAT 可能不適用於您的需求。

您可以設定 NLS_DATE_FORMAT 的地方有很多。
* 環境變數(或 Win32 系統上的 Windows 登錄檔)
* orclSID.ora
* 以每個連線階段為基礎;在登入後執行此語句

$cursor=OCIParse($connection,
"ALTER SESSION SET NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS'");
OCIExecute($cursor);
OCIFreeCursor($cursor);
erabbott at NOSPAMterra dot com dot br
22 年前
如同我之前的文章所述,在 CLOB 欄位中使用轉換函數時,也會發生同樣的情況。

您使用的任何轉換函數可能都會發生同樣的情況。

因此,這將無法運作

SELECT ... TO_CHAR(MY_CLOB) ...

$my_clob = OCIResult($stmt,"MY_CLOB");

但這樣可以

SELECT ... TO_CHAR(MY_CLOB) AS MYC ...

$my_clob = OCIResult($stmt,"MYC");

敬上。
To Top