【问题标题】:Why MYSQL loop is freezing the client browser?为什么 MYSQL 循环会冻结客户端浏览器?
【发布时间】:2017-02-26 23:32:27
【问题描述】:

我在等待来自 MySQL 数据库的数据时运行了一段时间的 php 脚本。 问题是当客户端刷新浏览器时,这似乎不起作用,相反,它一直在等待......

下面带有循环的代码

<?php
session_start();//i start the session here.
require_once('connections/connections.php');//mysql


function loop_to_get_more_data(){
    global $con;


    //checking number of connected friends in db...
    $check=$con->query("SELECT numfriends FROM SUPERDATATABLE WHERE USERID=$_SESSION[USERID] AND numfriends>0");
    if(mysqli_num_rows($check)>0){

        //here i do more work and finally exit;

    }else{
        //loop again...
        sleep(3);
        loop_to_get_more_data();
        return;//required to stop.
    }

}loop_to_get_more_data();


exit;//after finshing everything...

现在您可以看到,代码运行良好,但问题是 此循环强制浏览器等待,直到服务器响应请求或在数据存在时退出循环

当客户端刷新浏览器时,浏览器拒绝刷新自己,无论如何都保持相同的状态。

我在这里做错了什么?

【问题讨论】:

    标签: php mysql loops mysqli


    【解决方案1】:

    我认为您正在寻找 session_write_close(); 函数

    <?php
    session_start();//please make note of this.
    require_once('connections/connections.php');
    
    //NOW CLOSE THE SESSION RIGHT BEFORE ENTERING THIS FUNCTION LOOP
    session_write_close();//this does the magic.
    
    function loop_to_get_more_data(){
        global $con;
    
        $check=$con->query("SELECT numfriends FROM SUPERDATATABLE WHERE USERID=$_SESSION[USERID] AND numfriends>0");
        if(mysqli_num_rows($check)>0){
            //more code if any;
        }else{
            sleep(3);
            loop_to_get_more_data();
            return;//required to stop.
        }
    
    }loop_to_get_more_data();
    
    exit;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-21
      • 2017-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多