为什么MYSQL循环冻结客户端浏览器?

时间:2016-10-17 21:02:29

标签: php mysql loops mysqli

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

以下代码与循环

<?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...

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

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

我在这里做错了什么。?

1 个答案:

答案 0 :(得分: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;