警告:mysqli::reap\u async\u query():连接未打开、清除或已关闭

j13ufse2  于 2021-06-25  发布在  Mysql
关注(0)|答案(1)|浏览(382)

我试着用异步查询做一些测试。我得到这个结果:

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);
?>
fzsnzjdm

fzsnzjdm1#

万一有人来找我的答案,我会把我用mysqli\u 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 )

编辑:它似乎拉在任何顺序的结果,他们来这意味着他们往往是无序的。我尝试向表中添加另一列,其中包含一个数字以指示它是什么表,然后我可以在显示结果之前对结果进行排序。如果有人知道更好的方法让我知道。

相关问题