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 下使用 PHP 4.3.3 和 IBM DB2 V.7.2 和 V.8.1 可以很好地工作

<?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 Web 服务器。

Charles
kynaston at yahoo dot com
22 年前
如果您在 PHP 4.2+ 中使用 Masoud 的代码,请将第五行更改为

odbc_fetch_into($result,&$rs);

(参数的顺序已更改)
j dot a dot z at bluewin dot ch
21 年前
嘿,“general at maccrafters dot 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 dot Karlsson at usa dot net
22 年前
可以通过在 php_odbc.h 第 216 行(219 行)和 php_odbc.c 第 87 行(90 行)和 1229 行(1380 行)中删除 #ifdef HAVE_DBMAKER/#endif 来使 odbc_fetch_object() 和 odbc_fetch_array() 都工作。

我在使用指向 MySQL 数据库的 ODBC 的 PHP 4.2.0 版本中成功地做到了这一点。

我真的不明白为什么从一开始就有 #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 at hotmail dot 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 at locked dot org
21 年前
我的 2 分钱

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