• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • odbc_fetch_object()

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

    Fetch a result row as an object

    说明

    odbc_fetch_object(resource $result[,int $rownumber]): object

    Fetch an object from an ODBC query.

    参数

    $result

    The result resource from odbc_exec().

    $rownumber

    Optionally choose which row number to retrieve.

    返回值

    Returns an object that corresponds to the fetched row, or FALSE if there are no more rows.

    注释

    Note: This function exists when compiled with DBMaker, IBM DB2 or UnixODBC support.

    参见

    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)) {
     ....
    }
    This function requires one of the following to exist: Windows, DB2, or UNIXODBC.