警告:mysqli :: reap_async_query():连接未打开,清除或已关闭

时间:2018-01-11 19:38:01

标签: php mysql mysqli

我正在尝试使用异步查询进行一些测试。我得到了这个结果:

Array ( [0] => 2017-11-28 11:34:01 [1] => 50 )  
Warning: mysqli::reap_async_query(): Connection not opened, clear or has been closed in /var/www/testasync.php on line 24.

我无法在任何地方找到任何有关此警告的信息。直到我的代码结束,我才关闭我的连接。这是什么意思?

这是我的代码:

<?php    
$connect = mysqli_connect("localhost", "user", "password", "test");
if (!$connect) {
     die('Could not connect: ' . mysqli_error($connect));   
}

// Queries
$sql0 = "SELECT * FROM flow01 where datetime = (select min(datetime) from flow01)";
mysqli_query($connect, $sql0, MYSQLI_ASYNC);
$sql1 = "SELECT * FROM flow01 where datetime = (select max(datetime) from flow01)";
mysqli_query($connect, $sql1, MYSQLI_ASYNC);
$sql2 = "SELECT * FROM hum01 where datetime = (select min(datetime) from hum01)";
mysqli_query($connect, $sql2, MYSQLI_ASYNC);
$sql3 = "SELECT * FROM hum01 where datetime = (select max(datetime) from hum01)";
mysqli_query($connect, $sql3, MYSQLI_ASYNC);

// Results
$i = 0;
foreach ($connect as $result) {
    if ($result = $connect->reap_async_query()) {
        print_r($result->fetch_row());
        mysqli_free_result($result);
        $i++;
    }
}
mysqli_close($connect);
?>

1 个答案:

答案 0 :(得分:0)

以防其他人来寻找答案我发布了使用mysqli_poll制作的代码。

<?php    
// Queries
$sql0 = "SELECT * FROM flow01 where datetime = (select min(datetime) from flow01)";
$sql1 = "SELECT * FROM flow01 where datetime = (select max(datetime) from flow01)";
$sql2 = "SELECT * FROM hum01 where datetime = (select min(datetime) from hum01)";
$sql3 = "SELECT * FROM hum01 where datetime = (select max(datetime) from hum01)";

$all_links = array();
for($i=0; $i<=3; $i++) {
    $connect = mysqli_connect("localhost", "user", "password", "test"); 
    mysqli_query($connect, ${'sql' . $i}, MYSQLI_ASYNC);
    $all_links[] = $connect;
}

$processed = 0;
do {
    $links = $errors = $reject = array();
    foreach ($all_links as $connect) {
        $links[] = $errors[] = $reject[] = $connect;
    }
    if (!mysqli_poll($links, $errors, $reject, 2)) {
        continue;
    }
    foreach ($links as $connect) {
        if ($result = $connect->reap_async_query()) {
            $new = $result->fetch_row();
            print_r($new);
            mysqli_free_result($result);
        } else die(sprintf("MySQLi Error: %s", mysqli_error($connect)));
        $processed++;
    }
} while ($processed < count($all_links));

mysqli_close($connect);
?>

这给出了以下结果:

Array ( [0] => 2017-11-28 11:34:29 [1] => 13 ) Array ( [0] => 2017-12-20 12:11:12 [1] => 12 ) Array ( [0] => 2018-01-12 06:37:10 [1] => 0 ) Array ( [0] => 2017-11-28 11:34:01 [1] => 50 ) 

编辑:它似乎以任何顺序提取结果,这意味着它们经常出现故障。我尝试在我的表中添加另一个列,用一个数字来表示它是什么表,然后我可以在显示它们之前对结果进行排序。如果有人知道更好的方法,请告诉我。