Bug #17295 Updated: Bug in while statement
| From: | sniper@php.net | Date: | Fri, 17 May 2002 22:04:52 +0000 |
| Subject: | Bug #17295 Updated: Bug in while statement | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-7958@lists.php.net to get a copy of this message | ||
ID: 17295
Updated by: sniper@php.net
Reported By: pahowes@fair-ware.com
-Status: Open
+Status: Feedback
Bug Type: Scripting Engine problem
Operating System: FreeBSD 4.5
PHP Version: 4.2.0
New Comment:
What if you remove that bogus 'die(..)' stuff from the
function? It now dies when there are no more rows.
Previous Comments:
------------------------------------------------------------------------
[2002-05-17 16:51:06] pahowes@fair-ware.com
I was following one of the samples in the MySQL section of the manual
to extract data from a table, and ran into the following:
If you have a class that handles the database access (I called it
DBManager:
class DBManager
{
var $link;
var $result;
function connect( )
{
$this->link = mysql_pconnect( 'hostname', 'username',
'password'
);
mysql_select_db( 'dbname', $this->link );
}
function query( $q )
{
$this->result = mysql_query( $q, $this->link );
return( $this->result );
}
function next_row( )
{
$row = mysql_fetch_array( $this->result ) or
die( "error: " . mysql_error( ) );
return( $row );
}
};
The sample in the documentation works fine:
$link = mysql_connect( 'hostname', 'username', 'password' );
mysql_select_db( 'dbname', $link );
$q = "SELECT * FROM user";
$result = mysql_query( $q );
while( $row = mysql_fetch_array( $result ) )
{
echo $row['username'];
}
When replaced with the object above:
$db = new DBManager( )
$db->connect( );
$q = "SELECT * FROM user";
$result = $db->query( $q );
while( $row = $db->next_row( ) )
{
echo $row['username'];
}
...Fetching the next row will fail with no error message from MySQL
(the return value from the call to "mysql_error" is empty.)
I think this is a bug in the scripting engine itself. Using a function
call in the while condition works fine, but using a class-function call
causes an error. If the "$row = $db->next_row( )" statement appears
anywhere else, it will work fine.
--
Paul A. Howes
pahowes@fair-ware.com
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=17295&edit=1