|  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Request #67486 inconsistent interface for async
Submitted: 2014-06-20 09:32 UTC Modified: 2023-01-10 15:43 UTC
Avg. Score:4.0 ± 1.0
Reproduced:2 of 2 (100.0%)
Same Version:1 (50.0%)
Same OS:1 (50.0%)
From: robbie86 at gmx dot de Assigned:
Status: Wont fix Package: MySQLi related
PHP Version: 5.4.29 OS: Debian 7
Private report: No CVE-ID: None
Have you experienced this issue?
Rate the importance of this bug to you:

 [2014-06-20 09:32 UTC] robbie86 at gmx dot de
It's not possible to get the results of an async query in an user-extended mysqli_result.

For synchronous queries you could do:

class DatabaseResult extends mysqli_result {}
$r = mysqli_real_query($link, $query);
$o = new DatabaseResult($link, MYSQLI_STORE_RESULT);

For async the API is limited to mysqli_query() and mysqli_reap_async_query(). mysqli_reap_async_query() not only calls mysqlnd_reap_async_query(), but also mysql_store_result()/mysql_use_result(). Therefore the mysqli_result constructor is not usable.

Possible solutions:

1) Optional argument to mysqli_reap_async_query() to only call mysqlnd_reap_async_query() but not mysql_store_result()/mysql_use_result() - not elegant but small fix
2) mysqli_query() should save async case; mysql_store_result() & mysql_use_result() should call mysqlnd_reap_async_query() automatically; remove mysqli_reap_async_query()

Workaround now (overhead of SELECT 1 query):

$r = $link->multi_query('SELECT 1;'.$query);
// do sth. else (async)
$o = new DatabaseResult($link, MYSQLI_STORE_RESULT);


Add a Patch

Pull Requests

Add a Pull Request


AllCommentsChangesGit/SVN commitsRelated reports
 [2014-06-20 13:06 UTC]
-Status: Open +Status: Assigned -Assigned To: +Assigned To: mysql
 [2014-06-20 13:06 UTC]
Valid feature request.
 [2017-10-24 08:11 UTC]
-Status: Assigned +Status: Open -Assigned To: mysql +Assigned To:
 [2023-01-10 15:43 UTC]
-Status: Open +Status: Wont fix
 [2023-01-10 15:43 UTC]
Thank you for this suggestion. I like your second option and I think it could be a reasonable solution. However, I doubt there's a very high demand for this. Inheritance from PHP standard classes should be avoided. Use composition instead. This would also be a major breaking chance for the few people that actually use the async API. For this reason, there are no current plans to change this functionality. 

If you would like to follow up with this request, please start RFC process. IMHO the async API has a lot more quirks like this that should be ironed out.
PHP Copyright © 2001-2023 The PHP Group
All rights reserved.
Last updated: Thu Sep 21 22:01:25 2023 UTC