ID: 45289 Comment by: jochen dot wiedmann at gmail dot com Reported By: mike dot benza at rice dot edu Status: No Feedback Bug Type: MySQLi related Operating System: * PHP Version: 5.2.4 New Comment:
I have checked the latest snapshot (php5.2-200905151830), whether the problem still persists by using the script below. (Should be easy to derive a .phpt file from it.) <?php $mysqli = mysqli_init(); $mysqli->real_connect("localhost", "root", null, 'test'); if (mysqli_connect_errno()) { printf("Connect failed: %s\n", mysqli_connect_error()); exit(); } $mysqli->query("DROP TABLE IF EXISTS prep_and_fetch_row") or die($mysqli->error); $mysqli->query("CREATE TABLE prep_and_fetch_row(id BIGINT NOT NULL PRIMARY KEY, name VARCHAR(64) NOT NULL)") or die($mysqli->error); $mysqli->query("INSERT INTO prep_and_fetch_row (id, name) VALUES (1, 'abc')") or die($mysqli->error); $stmt = $mysqli->prepare("SELECT * FROM prep_and_fetch_row WHERE id=?") or die($mysqli->error); $id = "1"; $stmt->bind_param("i", $id) or die($mysqli->error); $stmt->execute() or die($mysqli->error); $result = $mysqli->use_result() or die($mysqli->error); while ($row = $result->fetch_row()) { print "----- result row -----------\n"; print_r($row); } print "----- no more results -----------\n"; $mysqli->query("DROP TABLE prep_and_fetch_row") or die($mysqli->error); $mysqli->close(); ?> Expected output: Something like ----- result row ----------- Array ( [0] => int(1) [1] => string(3) "abc" ) ----- no more results ----------- Actual output: ----- result row ----------- Array ( [0] => [1] => ) ----- no more results ----------- I'd consider this to be a clear bug. Previous Comments: ------------------------------------------------------------------------ [2009-05-15 13:39:22] jochen dot wiedmann at gmail dot com I have the same problem with PHP 5.2.6, as delivered with Fedora 10 Linux. ------------------------------------------------------------------------ [2008-07-22 01:00:02] php-bugs at lists dot php dot net No feedback was provided for this bug for over a week, so it is being suspended automatically. If you are able to provide the information that was originally requested, please do so and change the status of the bug back to "Open". ------------------------------------------------------------------------ [2008-07-14 21:05:49] j...@php.net Please try using this CVS snapshot: http://snaps.php.net/php5.2-latest.tar.gz For Windows (zip): http://snaps.php.net/win32/php5.2-win32-latest.zip For Windows (installer): http://snaps.php.net/win32/php5.2-win32-installer-latest.msi ------------------------------------------------------------------------ [2008-07-11 08:54:43] omolano at PLEASENOSPAMinicia dot es I've also had this problem. In my case I was trying to use PDO::FETCH_ASSOC on a prepared statement and the database was SQLite 3 based. I also got null values, like the above poster, not garbage. ------------------------------------------------------------------------ [2008-06-17 02:33:54] mike dot benza at rice dot edu Description: ------------ It's not possible (as far as I can tell) to use a prepared statement in conjunction with mysqli_result::fetch_row or mysqli_result::fetch_assoc. The inability to do it is not documented in the manual online. There is no error given when you try to use fetch_row or fetch_assoc on a result. In fact, it returns successfully, with garbage. This is a similar issue as http://bugs.php.net/bug.php?id=42619&edit=2, but there is still no documentation of the behavior and no error thrown when trying to use fetch_row or fetch_assoc on a result from a prepared statement (Note: I only have 5.2.4, since that's the highest available on my OS. If you really want me to upgrade, I'll build it from source, but I think you know about this incompatibility, since it should be your primary use case; mysqli should be able to combine the security of prepared statements with the useful features of the old mysql extension) (See also: http://www.robpoyntz.com/blog/?p=189, which doesn't work, and I haven't had a chance to figure out why) (See also: http://blog.myhat.de/2007/06/26/pdo-and-extending-mysqli/) Reproduce code: --------------- $db = new mysqli(...); $teamId = some integer; $stmt = $db->prepare('SELECT * FROM teams where id=? LIMIT 1;'); if($stmt === FALSE) { die("Could not prepare statement"); } if($stmt->bind_param('i', $teamId) === FALSE) { die("Could not bind params"); } if($stmt->execute() === FALSE) { die("Could not execute statement"); } if(($result = $db->store_result()) === FALSE) { die("Could not store result (db)." . $db->error); } $teamAsArray = $result->fetch_assoc(); print_r($teamAsArray); Expected result: ---------------- I would expect the above code to have $teamAsArray be an associative array with the fields in my team table as the keys, and the values be the corresponding values. At the very least, I would expect an error to be thrown since it can't. I expect: Array ( [id] => 1 [name] => Nicaragua II [updateTime] => 2008-06-05 00:35:43 [meetings] => Saturdays at 10:00pm in the Mech Lab [country] => Nicaragua [currentProjectId] => 3) Actual result: -------------- An array full of garbage...but not senseless garbage, but rather the fields in the wrong spots, with some garbage mixed in between: Array ( [id] => [name] => [updateTime] => ��� [meetings] => Nicaragua II [country] => �#+ [currentProjectId] => Saturdays at 10:00pm in the Mech Lab ) ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=45289&edit=1