©
本文档使用 PHP中文网手册 发布
(PHP 5 >= 5.3.0)
mysqli::poll -- mysqli_poll — Poll connections
面向对象风格
&$read
, array &$error
, array &$reject
, int $sec
[, int $usec
] )过程化风格
&$read
, array &$error
, array &$reject
, int $sec
[, int $usec
] )Poll connections. 仅可用于 mysqlnd。 The method can be used as static.
read
List of connections to check for outstanding results that can be read.
error
List of connections on which an error occured, for example, query failure or lost connection.
reject
List of connections rejected because no asynchronous query has been run on for which the function could poll results.
sec
Number of seconds to wait, must be non-negative.
usec
Number of microseconds to wait, must be non-negative.
Returns number of ready connections upon success, FALSE
otherwise.
Example #1 A mysqli_poll() example
<?php
$link1 = mysqli_connect ();
$link1 -> query ( "SELECT 'test'" , MYSQLI_ASYNC );
$all_links = array( $link1 );
$processed = 0 ;
do {
$links = $errors = $reject = array();
foreach ( $all_links as $link ) {
$links [] = $errors [] = $reject [] = $link ;
}
if (! mysqli_poll ( $links , $errors , $reject , 1 )) {
continue;
}
foreach ( $links as $link ) {
if ( $result = $link -> reap_async_query ()) {
print_r ( $result -> fetch_row ());
if ( is_object ( $result ))
mysqli_free_result ( $result );
} else die( sprintf ( "MySQLi Error: %s" , mysqli_error ( $link )));
$processed ++;
}
} while ( $processed < count ( $all_links ));
?>
以上例程会输出:
Array ( [0] => test )
[#1] l_sanczyk at hotmail dot com [2014-07-21 19:56:26]
You can use the following code to execute, for example, 10 simultaneous queries:
$query = "SELECT `field1`, `field2` FROM `table` WHERE `field1`='something'";
$all_links = array();
for($i=0; $i<10; $i++) {
$link = mysqli_connect("your.mysql.server.here","your@user","pa$$w0rd",DataBase_Name");
$link->query($query, MYSQLI_ASYNC);
$all_links[] = $link;
}
$processed = 0;
do {
$links = $errors = $reject = array();
foreach ($all_links as $link) {
$links[] = $errors[] = $reject[] = $link;
}
if (!mysqli_poll($links, $errors, $reject, 1)) {
continue;
}
foreach ($links as $link) {
if ($result = $link->reap_async_query()) {
print_r($result->fetch_row());
if (is_object($result))
mysqli_free_result($result);
} else die(sprintf("MySQLi Error: %s", mysqli_error($link)));
$processed++;
}
} while ($processed < count($all_links));
NOTE: If you get a "Warning: mysqli::query() expects parameter 2 to be long, string given" you have a mysqlnd installation or configuration issue.