Bug #17295 Updated: Bug in while statement
| From: | pahowes at fair-ware dot com | Date: | Sat, 13 Jul 2002 23:37:56 +0000 |
| Subject: | Bug #17295 Updated: Bug in while statement | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-14104@lists.php.net to get a copy of this message | ||
ID: 17295
Updated by: pahowes@fair-ware.com
Reported By: pahowes@fair-ware.com
-Status: No Feedback
+Status: Closed
Bug Type: Scripting Engine problem
Operating System: FreeBSD 4.5
PHP Version: 4.2.0
New Comment:
I apologize for not getting back to you. For what ever reason, I never
saw the reply asking me to remove the "or die" clause. I did that and
it solved the problem. I think it's safe to say that this was a case
of idiot operator error :-)
Thank you for you time!
--
Paul A. Howes
pahowes@fairware.com
Previous Comments:
------------------------------------------------------------------------
[2002-07-13 18:37:04] derick@php.net
No feedback was provided. The bug is being suspended because
we assume that you are no longer experiencing the problem.
If this is not the case and you are able to provide the
information that was requested earlier, please do so and
change the status of the bug back to "Open". Thank you.
------------------------------------------------------------------------
[2002-05-17 18:04:51] sniper@php.net
What if you remove that bogus 'die(..)' stuff from the
function? It now dies when there are no more rows.
------------------------------------------------------------------------
[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