ID: 29335
User updated by: mjs15451 at hotmail dot com
Reported By: mjs15451 at hotmail dot com
-Status: Feedback
+Status: Open
Bug Type: MySQL related
Operating System: Linux
PHP Version: 5.0.0
New Comment:
CREATE TABLE `mailbox` (
`username` varchar(255) NOT NULL default '',
`password` varchar(255) NOT NULL default '',
`name` varchar(255) NOT NULL default '',
`maildir` varchar(255) NOT NULL default '',
`quota` int(10) NOT NULL default '-1',
`domain` varchar(255) NOT NULL default '',
`created` datetime NOT NULL default '0000-00-00 00:00:00',
`modified` datetime NOT NULL default '0000-00-00 00:00:00',
`active` tinyint(4) NOT NULL default '1',
PRIMARY KEY (`username`),
KEY `username` (`username`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
INSERT INTO `mailbox` VALUES ('user1', 'testtest', 'User 1',
'example.com/user1/', 0, 'example.com', '2004-07-25 00:00:00',
'2004-07-25 00:00:00', 1);
INSERT INTO `mailbox` VALUES ('user2', 'testtest', 'User 2',
'example.com/user2/', 0, 'example.com', '2004-07-25 00:00:00',
'2004-07-25 00:00:00', 1);
<?php
$link = mysqli_connect ('localhost','postfix','postfix');
$success = mysqli_select_db ($link, 'postfix');
$result = mysqli_query ($link, 'SELECT * FROM mailbox');
//Good Code which prints username
while ($row = mysqli_fetch_array ($result, MYSQLI_BOTH)){
print "username:" . $row['username'] . "<br>";
}
$result = mysqli_query ($link, 'SELECT * FROM mailbox');
//Bad Code which doesn't print username
while ($row = mysqli_fetch_array ($result)){ //notice MYSQLI_BOTH,
MYSQL_ASSOC or MYSQLI_NUM missing
print "username:" . $row['username'] . "<br>"; //username will not
output
}
?>
According to the docs on
http://us2.php.net/manual/en/function.mysqli-fetch-array.php:
mixed mysqli_fetch_array ( object result [, int resulttype])
The optional second argument resulttype is a constant indicating what
type of array should be produced from the current row data. The
possible values for this parameter are the constants MYSQLI_ASSOC,
MYSQLI_NUM, or MYSQLI_BOTH. By default the mysqli_fetch_array()
function will assume MYSQLI_BOTH for this parameter.
I don't see this happening with the second loop of this query. I am
running Linux kernel 2.4.22, Apache 2.0.50, PHP 5.0.0 and Mysql
4.1.3beta
Previous Comments:
------------------------------------------------------------------------
[2004-07-23 18:07:37] [EMAIL PROTECTED]
I can't reproduce it.
please provide a short reproducable sample script.
------------------------------------------------------------------------
[2004-07-22 18:25:46] mjs15451 at hotmail dot com
Description:
------------
If a resulttype is not specified when looping through a query, the
resulting array from mysqli_fetch_array does not return any data.
MYSQLI_BOTH should be the default value for mysqli_fetch_array.
I'm also using MySQL 4.1.3beta
Reproduce code:
---------------
while ($row = mysqli_fetch_array($result)){
echo $row[0];
}
Expected result:
----------------
$row[0] should return the first column of the query.
Actual result:
--------------
The while loop executes for the number of rows returned in the query
but $row[0] does not return any data.
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=29335&edit=1