Bug #17357 Updated: odbc_fetch_row is broke in 4.2.1
| From: | davidr at pophost dot com | Date: | Tue, 25 Jun 2002 01:13:42 +0000 |
| Subject: | Bug #17357 Updated: odbc_fetch_row is broke in 4.2.1 | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-11989@lists.php.net to get a copy of this message | ||
ID: 17357
Updated by: davidr@pophost.com
Reported By: atampone@attechcomputer.com
Status: Closed
Bug Type: ODBC related
Operating System: Windows 2000 Advanced Server
PHP Version: 4.2.1
New Comment:
Whether it works for you or not.. there are 14 people who all said they
can reproduce this error. It worked fine under 4.1, and only broke
when we upgraded to 4.2. If so many people experienced the same
problem, then there is obviously something wrong here.
Previous Comments:
------------------------------------------------------------------------
[2002-06-24 17:36:03] kalowsky@php.net
This works for me in 4.2.1 and a recent pull from CVS.
------------------------------------------------------------------------
[2002-06-06 09:18:44] kalowsky@php.net
Sorry that last message is more for gory@alaphsoft-bg.com
------------------------------------------------------------------------
[2002-06-06 09:16:44] kalowsky@php.net
1) Please realize that register_globals is turned off in PHP 4.2.x
2) Can you please provide a full sample script to reproduce the
problem? The snippit you've shown doesn't really help as it doesn't
show the full process for the code being used.
------------------------------------------------------------------------
[2002-06-06 03:59:17] gory@alphasoft-bg.com
"nothing has changed to the odbc_fetch_row function in the last... 3 or
4 releases"
Ok but the script below work fine i php 4.1.2, but dies in 4.2.0 and
4.2.1
function odbc_record_count($sql_id, $CurrRow = 0) {
$NumRecords = 0;
odbc_fetch_row($sql_id,0);
while (odbc_fetch_row($sql_id)) {
$NumRecords++;
}
if( !odbc_fetch_row($sql_id, $CurrRow)) die("odbc_record_count -
odbc_fetch_row($CurrRow) failed");
return $NumRecords;
}
btw odbc_num_rows still dont work properly
------------------------------------------------------------------------
[2002-06-04 12:15:16] atampone@attechcomputer.com
Here is pysudocode for an example script that will casue this error.
$c=odbc_connect("some source", "uname", "pass" );
$res = odbc_exec($c,"some SQL statement");
if (!odbc_fetch_row($res)) // check if there are results
{
// do something
}
else
{
odbc_fetch_row($res,0); // reset results <<-- this is what doesn't
work
while (odbc_fetch_row($res))
{
// loop through results
}
}
what happens in this expample is that the pointer on teh $res resource
is advanced when the odbc_fetch_row() function is called in the if
statement. It is then advanced when called again in the while
statement and the first row gets lost. This happens because the
odbc_fetch_row($res,0) does not move the pointer back to 0. In
versions of PHP prior to 4.2.1 odbc_fetch_row($res,0) worked properly.
Only after 4.2.1 has it become broken. I had to write twice as much
code to get arround this and I run into this quite often. I had to
rewrite quite a few functions becasue of this bug.
- Anthony
------------------------------------------------------------------------
The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
http://bugs.php.net/17357
--
Edit this bug report at http://bugs.php.net/?id=17357&edit=1