Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如果rowCount为空,请重试_Php_Mysql_Loops_If Statement_Rowcount - Fatal编程技术网

Php 如果rowCount为空,请重试

Php 如果rowCount为空,请重试,php,mysql,loops,if-statement,rowcount,Php,Mysql,Loops,If Statement,Rowcount,我正在从一个表运行一个查询,该表的数据每30秒刷新一次(删除并重新插入) 我希望我的查询(输出行计数)检测到行计数为null(或零)并重新运行查询。最大重试次数:5次 第五次重试后,如果仍然为零,我希望行计数打印“0” 我知道这是一个循环,但我不知道如何从if for行中循环它 <?php $con=mysqli_connect("HOST","USERNAME","PASS","TABLENAME"); $sql="SELECT id FROM candyshop WHERE ca

我正在从一个表运行一个查询,该表的数据每30秒刷新一次(删除并重新插入)

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

第五次重试后,如果仍然为零,我希望行计数打印“0”

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

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

?>

仍然是StackOverflow的新手,但是你能试试这个吗

<?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);
$i=0;
做{
$result=mysqli\u查询($con,$sql);
$count=mysqli\u num\u行($result);
}而($count==0&$i++<5)

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

使用COMET编程,您可以轻松编写游戏或任何东西。但若您决定使用循环查询,那个么只有一件事您要做,那就是for-loop

$rowcount=0;
$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);
做{ if($result=mysqli_查询($con,$sql)){ $rowcount=mysqli\u num\u行($result); printf($rowcount);//打印行数 mysqli_免费_结果($result); }
}当(++$numbert您想要的是ajax,请参阅此处的文档。如果您连续5次启动查询,则值不太可能更改。您能解释一下为什么您认为这是必要的吗?。更好的解决方案是在删除和插入数据时使用事务。那么表永远不会为空。为什么在$re之前有两个破折号try?Ref.-$retry>0);关于:while($count==0&&$retry<6)呢;破折号将
$retry
的值减少1,然后检查条件。我尝试了它-如果表为空,则没有输出。我的代码段没有输出任何内容,这是您必须添加的内容。但是如果找到任何行,它们将位于此代码之后的变量
$result
$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);