MysqlndUhConnection::reapQuery
(PECL mysqlnd-uh >= 1.0.0-alpha)
MysqlndUhConnection::reapQuery — Récupère le résultat depuis une requête asynchrone
Description
public bool MysqlndUhConnection::reapQuery
( mysqlnd_connection
$connection
)Récupère le résultat depuis une requête asynchrone.
Liste de paramètres
-
connection
-
Gestionnaire de connexion Mysqlnd. Ne pas modifier !
Valeurs de retour
Retourne TRUE
en cas de succès.
Sinon, retourne FALSE
Exemples
Exemple #1 Exemple avec MysqlndUhConnection::reapQuery()
- <?php
- class proxy extends MysqlndUhConnection {
- public function reapQuery($res) {
- printf("%s(%s)\n", __METHOD__, var_export(func_get_args(), true));
- $ret = parent::reapQuery($res);
- printf("%s retourne %s\n", __METHOD__, var_export($ret, true));
- return $ret;
- }
- }
- mysqlnd_uh_set_connection_proxy(new proxy());
- $conn1 = new mysqli("localhost", "root", "", "test");
- $conn2 = new mysqli("localhost", "root", "", "test");
- $conn1->query("SELECT 1 as 'one', SLEEP(1) AS _sleep FROM DUAL", MYSQLI_ASYNC | MYSQLI_USE_RESULT);
- $conn2->query("SELECT 1.1 as 'one dot one' FROM DUAL", MYSQLI_ASYNC | MYSQLI_USE_RESULT);
- $links = array(
- $conn1->thread_id => array('link' => $conn1, 'processed' => false),
- $conn2->thread_id => array('link' => $conn2, 'processed' => false)
- );
- $saved_errors = array();
- do {
- $poll_links = $poll_errors = $poll_reject = array();
- foreach ($links as $thread_id => $link) {
- if (!$link['processed']) {
- $poll_links[] = $link['link'];
- $poll_errors[] = $link['link'];
- $poll_reject[] = $link['link'];
- }
- }
- if (0 == count($poll_links))
- break;
- if (0 == ($num_ready = mysqli_poll($poll_links, $poll_errors, $poll_reject, 0, 200000)))
- continue;
- if (!empty($poll_errors)) {
- die(var_dump($poll_errors));
- }
- foreach ($poll_links as $link) {
- $thread_id = mysqli_thread_id($link);
- $links[$thread_id]['processed'] = true;
- if (is_object($res = mysqli_reap_async_query($link))) {
- // result set object
- while ($row = mysqli_fetch_assoc($res)) {
- // eat up all results
- var_dump($row);
- }
- mysqli_free_result($res);
- } else {
- // either there is no result (no SELECT) or there is an error
- if (mysqli_errno($link) > 0) {
- $saved_errors[$thread_id] = mysqli_errno($link);
- printf("'%s' caused %d\n", $links[$thread_id]['query'], mysqli_errno($link));
- }
- }
- }
- } while (true);
- ?>
L'exemple ci-dessus va afficher :
proxy::reapQuery(array ( 0 => NULL, )) proxy::reapQuery retourne true array(1) { ["one dot one"]=> string(3) "1.1" } proxy::reapQuery(array ( 0 => NULL, )) proxy::reapQuery retourne true array(2) { ["one"]=> string(1) "1" ["_sleep"]=> string(1) "0" }
Voir aussi
- mysqlnd_uh_set_connection_proxy() - Installe un proxy pour les connexions mysqlnd
- mysqli_real_async_query()