This would be so much more useful if it contained information on what the object returned contains. From var_dump() it seems just an assoc array in object form. But is there column type info, for example?
(PHP 4 >= 4.0.2, PHP 5, PHP 7, PHP 8)
odbc_fetch_object — Lit une ligne de résultat dans un objet
odbc_fetch_object() lit une ligne de résultat dans un objet depuis une requête ODBC.
statement
La ressource de résultat depuis la fonction odbc_exec().
row
Le numéro de ligne à récupérer, en option.
Retourne un objet qui correspond à la ligne récupérée, ou false
s'il n'y a plus de ligne de disponible.
Note: Cette fonction est disponible lorsque PHP est compilé avec le support IBM DB2 ou UnixODBC.
This would be so much more useful if it contained information on what the object returned contains. From var_dump() it seems just an assoc array in object form. But is there column type info, for example?
odbc_fetch_object() works nice with PHP 4.3.3 under W2K with IBM DB2 V.7.2 and 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);
?>
my 2 cents:
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;
}
works fine for me (PHP 4.3.1)
I asked one of the developers to enable this function in the CVS. I tried it and it worked. I didnt do anything special. I was using a Microsoft Access ODBC driver that came with my Windows XP Pro Install.
I was using the Apache web server.
Charles
Here's a bit of code I came up with tha behaves just like 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);
}
Special thanks to previous posters for giving me a starting point for this code.
If you're using Masoud's code in PHP4.2+, change the fifth line to:
odbc_fetch_into($result,&$rs);
(the order of arguments have changed)
It' possible to get both odbc_fetch_object() and odbc_fetch_array() to work just by removing #ifdef HAVE_DBMAKER/#endif in php_odbc.h line 216 (219) and the same in php_odbc.c line 87 (90) and 1229 (1380).
I've done this sucessfully in the PHP 4.2.0 release using ODBC towards a MySQL database.
I really can't understand why the #ifdef is there from the beginning, but they do have their reasons.
These were the files i "patched"
/* $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 $ */
hey "general at maccrafters dot com"
thank you very much for your code. it saved me time!
however i extended it a bit!
---------------------------------------------
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;
}
---------------------------------------------
cheers, jaz
This function not availible in PHP 4.1.1 , you can try this :
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;
}
if you wanna use this function in a loop you must set rownumber parameter
you can't use this function like :
while ($myobj=odbc_fetch_object($res)) {
....
}