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()