如果 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);
这基本上就是对您的请求的回答,通过它需要更多的解释才能有用。
我正在 运行查询来自 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);
这基本上就是对您的请求的回答,通过它需要更多的解释才能有用。