PHP Conference Japan 2024

odbc_fetch_object

(PHP 4 >= 4.0.2, PHP 5, PHP 7, PHP 8)

odbc_fetch_object將結果列擷取為物件

說明

odbc_fetch_object(Odbc\Result $statement, ?int $row = null): stdClass|false

從 ODBC 查詢擷取一個 物件

參數

statement

odbc_exec() 取得的 ODBC 結果物件。

列 (row)

選擇要擷取的列號(可選)。

返回值

返回一個對應於所擷取列的物件,如果沒有更多列,則返回 false

更新日誌

版本 說明
8.4.0 statement 現在需要一個 Odbc\Result 實例;先前需要的是 資源
8.4.0 row 現在可以為 null。

注意事項

注意 當使用 DBMaker、IBM DB2 或 UnixODBC 支援編譯時,此函式才會存在。

參見

新增筆記

使用者貢獻的筆記 10 則筆記

thorsten at rinne dot info
21 年前
odbc_fetch_object() 在 W2K 下使用 IBM DB2 V.7.2 和 V.8.1 與 PHP 4.3.3 配合良好

<?php
$conn
= odbc_connect($db_name, $username, $password) or die(odbc_error_msg());
$sql = "SELECT * FROM TABLE";
$result = odbc_exec($conn, $sql);
while (
$rows = odbc_fetch_object($result)) {
print
$rows->COLUMNNAME;
}
odbc_close($conn);
?>
general at maccrafters dot com
22 年前
這是我想出的一段程式碼,其行為與 mysql_fetch_object() 相同

function odbc_fetch_object($result)
{
$rs=array();
if(odbc_fetch_into($result,&$rs))
{
foreach($rs as $key=>$value)
{
$fkey=strtoupper(odbc_field_name($result,$key+1));
$rs_obj->$fkey = trim($value);

}
}
return($rs_obj);
}

特別感謝之前的發帖者,他們為我提供了這段程式碼的起點。
匿名
3 年前
如果它包含關於返回物件內容的資訊,這會更有用。從 var_dump() 看來,它似乎只是一個物件形式的關聯陣列。但例如,是否有欄位類型資訊?
charlesk at netgaintechnology dot com
21 年前
我請一位開發人員在 CVS 中啟用此功能。我試了一下,它可以正常運作。我沒有做任何特別的事情。我使用的是 Windows XP Pro 安裝隨附的 Microsoft Access ODBC 驅動程式。

我使用的是 Apache 網頁伺服器。

Charles
kynaston@yahoo.com
22 年前
如果您在 PHP4.2+ 版本中使用 Masoud 的程式碼,請將第五行更改為

odbc_fetch_into($result,&$rs);

(參數的順序已更改)
j.a.z@bluewin.ch
21 年前
嗨,"general@maccrafters.com"

非常感謝您的程式碼,它幫我省了很多時間!
不過我稍微擴展了一下!
---------------------------------------------
function __odbc_fetch_object($res)
{
if( function_exists("odbc_fetch_object") )
return odbc_fetch_object($res);

$rs = array();
$rs_obj = false;
if( odbc_fetch_into($res, &$rs) )
{
foreach( $rs as $key=>$value )
{
$fkey = odbc_field_name($res, $key+1);
$rs_obj->$fkey = trim($value);
}
}
return $rs_obj;
}
---------------------------------------------
乾杯,jaz
Marcus.Karlsson@usa.net
22 年前
只要移除 php_odbc.h 第 216 (219) 行的 #ifdef HAVE_DBMAKER/#endif 以及 php_odbc.c 第 87 (90) 和 1229 (1380) 行的相同部分,就可以讓 odbc_fetch_object() 和 odbc_fetch_array() 都能正常運作。

我在 PHP 4.2.0 版本中使用 ODBC 連接 MySQL 資料庫時成功地做到了這一點。

我真的不明白為什麼一開始會有 #ifdef,但他們一定有他們的理由。

這些是我「修補」的檔案
/* $Id: php_odbc.c,v 1.120.2.1 2002/04/08 22:21:30 sniper Exp $ */
/* $Id: php_odbc.h,v 1.45.2.1 2002/03/12 02:27:47 sniper Exp $ */
masuod_a@hotmail.com
22 年前
此函式在 PHP 4.1.1 中不可用,您可以試試這個

if (function_exists(odbc_fetch_object))
return;
function odbc_fetch_object($result, $rownumber=1) {
$rs=array();
odbc_fetch_into($result, $rownumber,$rs);
foreach ($rs as $key => $value) {
$fkey=strtolower(odbc_field_name($result, $key+1));
$rs_obj->$fkey = $value;
}
return $rs_obj;
}
如果要在迴圈中使用此函式,則必須設定 rownumber 參數
您不能像這樣使用此函式
while ($myobj=odbc_fetch_object($res)) {
....
}
philip
19 年前
此函式需要以下其中一項存在:Windows、DB2 或 UNIXODBC。
h4@locked.org
21 年前
我的淺見

function data($res) {
$obj = new stdClass();
$data_array = array();

if (!odbc_fetch_into($res, $data_array)) {
return 0;
}

$num_fields = odbc_num_fields($res);

for ($i = 0;$i < $num_fields; $i++) {
$name = odbc_field_name($res, $i + 1);
if (!$name) {
return 0;
}

$obj->{$name} = $data_array[$i];
}

return $obj;
}

對我來說效果很好 (PHP 4.3.1)
To Top