©
本文档使用 PHP中文网手册 发布
(PECL mysqlnd-uh >= 1.0.0-alpha)
MysqlndUhConnection::reapQuery — Get result from async query
$connection
)Get result from async query.
connection
Mysqlnd connection handle. Do not modify!
Returns TRUE
on success.
Otherwise, returns FALSE
Example #1 MysqlndUhConnection::reapQuery() example
<?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 returns %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 );
?>
以上例程会输出:
proxy::reapQuery(array ( 0 => NULL, )) proxy::reapQuery returns true array(1) { ["one dot one"]=> string(3) "1.1" } proxy::reapQuery(array ( 0 => NULL, )) proxy::reapQuery returns true array(2) { ["one"]=> string(1) "1" ["_sleep"]=> string(1) "0" }