如果 rowCount 为空,请重试

If rowCount empty, try again

我正在 运行查询来自 table 的查询,其数据每 30 秒刷新一次(删除并重新插入)。

我希望我的查询(输出行数)检测到行数为 null(或零)并重新 运行 查询。最大重试次数:5.

在第 5 次重试后,如果它仍然为零,我希望行数打印为“0”。

我知道这是一个循环,但我不知道如何从 if for row 中循环它。

<?php

$con=mysqli_connect("HOST","USERNAME","PASS","TABLENAME");


$sql="SELECT id FROM candyshop WHERE candy <= 5 AND sugartype ='hard'";

$number = 0; //init count for loop

if ($result=mysqli_query($con,$sql))
{

  $rowcount=mysqli_num_rows($result);  

  printf($rowcount); //print number of rows

  mysqli_free_result($result);

  $number = $number+1; //increment number for loop

}

mysqli_close($con);

?>

还是 Whosebug 的新手,但你能试试这个吗?

<?php
$con=mysqli_connect("HOST","USERNAME","PASS","TABLENAME");
$sql="SELECT id FROM candyshop WHERE candy <= 5 AND sugartype ='hard'";
$number = 0; //init count for loop
if ($result=mysqli_query($con,$sql)) {
    $rowcount=mysqli_num_rows($result);
    printf($rowcount); //print number of rows
    mysqli_free_result($result);
    $number = $number+1; //increment number for loop
    if ($number = 5) {
        printf(0);
        break 2;
    }
}
mysqli_close($con);
?>

使用 do while 循环,仅当行数大于 0 或已达到 5 次重试时才离开循环。

<?php

    $sql = "SELECT id FROM candyshop WHERE candy <= 5 AND sugartype ='hard'";
    $count = 0;
    $retry = 5;

    do {

        // Count the rows
        if ($result = mysqli_query($con, $sql)) {
            $count = mysqli_num_rows($result);
        }

        // Wait for 10ms
        if ($count === 0) {
            usleep(10000)
        }

    } while ($count === 0 && --$retry > 0);

    mysqli_close($con);

然而,这是非常糟糕的做法,我建议寻找其他方法。你为什么要清除然后重新填充 table?

$i = 0;
do {
    $result = mysqli_query($con, $sql);
    $count = mysqli_num_rows($result);
} while ($count == 0 && $i++ < 5)

据我所知,您正在尝试编写基于网络的游戏。实际上你的方法可能会使数据库有点忙。您不必循环查询。如果你打算这样做,我们在这里谈论的是毫秒。假设您的查询通常在 0.05 秒内给出结果,这意味着对于 5 次查询,您将只获得 0.25 秒的数据。

您可以使用 COMET Programming 轻松编写游戏或其他任何内容。但是,如果您决定使用循环查询,那么您只需要做一件事,那就是 for 循环。

$rowcount=0;
do {
 if ($result=mysqli_query($con,$sql)) {
  $rowcount=mysqli_num_rows($result);

  printf($rowcount); //print number of rows
  mysqli_free_result($result);

 }
} while(++$number<5 && $rowcount!=0);

这基本上就是对您的请求的回答,通过它需要更多的解释才能有用。