|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
[2002-05-13 18:48 UTC] kalowsky@php.net
|
|||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Tue Oct 28 14:00:01 2025 UTC |
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>