From: [EMAIL PROTECTED] Operating system: NT 4.0 Workstation - SP6 PHP version: 4.0.6 PHP Bug Type: ODBC related Bug description: odbc_fetch_into using an array in an object
While working on a class to encapsulate ODBC functionality, I discovered a problem in calling odbc_fetch_into with an array that exists inside a class. I was creating an array in the class to hold the results of the current row, and allowing the user of the class to reference the fields from there. It looked a little like this: class DB { var $record = array(); var $queryid; ... function fetch_row() { return(odbc_fetch_into($this->queryid, $this->record) } ... } When I tried to display the results from $record with something like echo $myDB->record[0];, all that is displayed is "Array[0]" (w/o quotes). After some tinkering, I modified the "fetch_row()" function in my class to accept an array parameter: function fetch_row($myarray) { return(odbc_fetch_into($this->queryid, $myarray) } This corrected the problem, although I have to give up my encapsulation. Now echo $myarray[0]; displays the appropriate data. So it appears that there is a conflict with encapsulated arrays and odbc_fetch_into. I believe that there was a similiar problem with the MS SQL extension a while back (mid version 3 around 3.0.12 or so). I'm accessing an MS Access 97 database through Microsoft's ODBC driver. A fully functional example follows. Greg Sohl Cedar Rapids, IA Here is a fully functional example of what works and what doesn't work. Its as short as I could get it and keep it understandable. <html><body> <table border="1"> <tr><td>ID</td><td>Name</td><td>Email</td></tr> <? // For testing simple array encapsulation class Results { var $record = array(); } $dblink = odbc_connect('ftp_reg', '', ''); $queryid = odbc_exec($dblink, "select * from Test"); // 3 columns /* This technique works - Calling odbc_fetch_into with a global array */ $my_array = array(); while(odbc_fetch_into($queryid, $my_array)) echo "<tr><td>$my_array[0]</td><td>$my_array[1]</td><td>$my_array[2]</td></tr>"; odbc_fetch_row($queryid, 0); // Reset to the begininning /* This technique does not work - Calling odbc_fetch_into with an array in a class */ $my_results = new Results(); while(odbc_fetch_into($queryid, $my_results->record)) echo "<tr><td>$my_results->record[0]</td><td>$my_results->record[1]</td><td>$my_results->record[2]</td></tr>"; ?> </table></body></html> -- Edit bug report at: http://bugs.php.net/?id=14238&edit=1 -- PHP Development Mailing List <http://www.php.net/> To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] To contact the list administrators, e-mail: [EMAIL PROTECTED]