Bug #17357 Updated: odbc_fetch_row is broke in 4.2.1
| From: | atampone at attechcomputer dot com | Date: | Tue, 04 Jun 2002 16:15:17 +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-9478@lists.php.net to get a copy of this message | ||
ID: 17357
Updated by: atampone@attechcomputer.com
Reported By: atampone@attechcomputer.com
-Status: Feedback
+Status: Open
Bug Type: ODBC related
Operating System: Windows 2000 Advanced Server
PHP Version: 4.2.1
New Comment:
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
Previous Comments:
------------------------------------------------------------------------
[2002-05-31 18:39:17] davidr@pophost.com
If any of the other 12 respondents can produce code to demostrate, it
will help.. mine is buried in an complex applications, and I will have
to develop a demo scenario. I can tell you everthing worked fine on
PHP 4.1.X, and broke when we upgraded to 4.2.X Only after we traced it
did we find that the direct row specification on the ODBC_FETCH_ROW
command was being ignored, and several other functions that would use
similiar direct row addresses. Perhaps it was a compile error... I
can't say. But it will take me a while to put together a set of demo
functions and database schema...
------------------------------------------------------------------------
[2002-05-28 16:59:41] kalowsky@php.net
nothing has changed to the odbc_fetch_row function in the last... 3 or
4 releases. Can you please post a sample script, and a copy of a test
schema (and data) to reproduce this problem.
------------------------------------------------------------------------
[2002-05-22 19:48:08] davidr@pophost.com
I have experienced the same problem.. My PHP system is Windows XP
running IIS and PHP 4.2.0. against a Windows 2K Server with MS-SQL
7.0.
I worked around it by closing the connetion and the requerying... The
odbc_num_rows also fails... and I had to do a loop of odbc_fetch_row to
count the rows in the recordset, then close the connection, then
requery.
The OpenSource program "WebCalendar" also isn't working with ODBC in
4.2.0 in a Windows environment with SQL Server (can't speak for
anything else)... it uses the odbc_fetch_array command...and that too
seems to be failing without any error messages.
------------------------------------------------------------------------
[2002-05-22 09:09:09] atampone@attechcomputer.com
In previous versions of PHP you could reset the pointer on ODBC resutls
using odbc_fetch_row($results,0). This no longer works! I can find no
other way to reset ODBC results. If you check for results and then try
to loop through the results, you will loose the 1st row!
- Anthony
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=17357&edit=1