|  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Request #52302 mysqli_fetch_all does not work with MYSQLI_USE_RESULT
Submitted: 2010-07-10 10:39 UTC Modified: 2010-08-11 10:01 UTC
Avg. Score:4.0 ± 1.0
Reproduced:2 of 2 (100.0%)
Same Version:2 (100.0%)
Same OS:1 (50.0%)
From: Assigned: andrey
Status: Closed Package: MySQLi related
PHP Version: 5.3.2 OS: Linux
Private report: No CVE-ID:
 [2010-07-10 10:39 UTC]
When using MYSQLI_USE_RESULT as the second parameter to mysqli_query, fetch_all returns null.

Test script:

$m = new MySQLi("", "root", "", "information_schema");

$sql = "show tables";

$res = $m->query($sql, MYSQLI_USE_RESULT);

$rows = $res->fetch_all();



Expected result:
An array of the table data.

Actual result:


Add a Patch

Pull Requests

Add a Pull Request


AllCommentsChangesGit/SVN commitsRelated reports
 [2010-07-10 16:32 UTC]
-Status: Open +Status: Assigned -Assigned To: +Assigned To: mysql
 [2010-07-12 18:16 UTC] brad at njoe dot com
Confirmed on Windows build as well using: PHP 5.3.2 (cli) (built: Mar  3 2010 

Even SELECT'ing a static string (e.g. SELECT 'This is a test.') exhibits this 
 [2010-07-13 10:36 UTC]
-Status: Assigned +Status: Bogus
 [2010-07-13 10:36 UTC]
Makes no sense to use USE_RESULT and buffer the result. Use STORE_RESULT, it is more effective for fetch_all(). Artifically limited.
 [2010-07-16 17:42 UTC]
-Status: Bogus +Status: Open
 [2010-07-16 17:42 UTC]
No, it makes perfect sense. In fact, it should be the preferred way to use fetch_all. Why store the data only to dump it into a PHP array on the next line? That is a very inefficient use of memory and plain careless development.

Or do you mean to say that fetch_all is fundamentally broken and will only work with STORE_RESULT?
 [2010-08-05 14:11 UTC]
The key point here is that the stored buffer can directly be used for fetch_all. The fetch_all does nothing but increasing the ref counts on the buffered values and adding them to an array. doing this with USE_RESULT would do an implicit STORE_RESULT.

Marking this a Feature request.
 [2010-08-05 14:12 UTC]
-Type: Bug +Type: Feature/Change Request
 [2010-08-09 19:29 UTC]
Automatic comment from SVN on behalf of andrey
Log: Fix Request #52302 mysqli_fetch_all does not work with MYSQLI_USE_RESULT
 [2010-08-09 19:37 UTC]
-Status: Assigned +Status: Closed
 [2010-08-09 19:37 UTC]
Fix will appear in 5.3.4 
In any case, it is sub-optimal to use MYSQLI_USE_RESULT with fetch_all, compared to MYSQLI_STORE_RESULT. However, fetch_all with USE_RESULT should be faster than manually looping.
 [2010-08-10 01:43 UTC]
Can we get an E_WARNING when fetch_all is called with a result handle that is using USE_RESULT? Can the documentation be updated to include a notice that this will not work?
 [2010-08-11 10:01 UTC]
-Assigned To: mysql +Assigned To: andrey
 [2010-08-11 10:01 UTC]
USE_RESULT will work, as of 5.3.4 (already in svn). E_WARNING or E_NOTICE?
I mean, it is good for consistency to have it work for both. Sometimes you might get a result set, as a parameter, and don't know where it came from, you should not fail because it was unbuffered. Thus, E_WARNING is a bit too much, IMO, but maybe E_NOTICE...
PHP Copyright © 2001-2015 The PHP Group
All rights reserved.
Last updated: Fri Nov 27 20:01:35 2015 UTC