正确使用空变量的方法

时间:2015-06-16 07:02:28

标签: php while-loop

我必须在数据库中找到一些价值。但我知道它会在一段时间之间出现。所以我决定创建一个函数并调用此函数,而这个值不会出现。此外,我检查这个值是否会在10秒内出现,然后打破循环:

function get_response($task_id) {    
    $query = "select * from table where task_id = '$task_id'";
    $db->query($query); 
    $result = $db->getResult();
    if (count($result) > 0)
       $response = $result;
    else $response = false;    
    return $response;
}

$start = microtime(true);
while (($res = get_response($task_id)) == false && (microtime(true) - $start) < 10) {
        if ($res != false) {
            print_r($res);
            break;
        }
        if((microtime(true) - $start) >= 10) {
            $response = 'timeout';
            break;
        }
        usleep(100000);
    }

但是$res永远不会返回我需要的东西(总是false。数据库中存在值,而问题是在while循环中引起的)。请以正确的方式纠正我。

4 个答案:

答案 0 :(得分:2)

($res = get_response($task_id)) == false

当$ res == false时,你只是进入while循环,所以在循环中它总是为假。尝试:

($res = get_response($task_id)) != false

答案 1 :(得分:0)

在您的代码中不包含页面的任何刷新代码。

尝试每隔10秒为页面使用刷新代码......你可以使用jquery或java-script或Ajax刷新..

答案 2 :(得分:0)

我不知道你的确切前端场景,比如你期望基于什么动作的结果。

但是如果你想继续从服务器获取更新,你绝对可以尝试HTML5 Server-Sent Events

您所要做的就是创建一个EventSource对象

var source = new EventSource("your_php_file.php");
// your_php_file is what will fetch results from database.

然后你可以听事件

source.addEventListener('message', function(e) {
  console.log(e.data); //get the data
}, false);

html5rocks wesite-eventsource

有一个很好的解释

答案 3 :(得分:0)

我认为还有更多错误。

get_response功能中,您不会查询查询,只能将其分配给您不会使用的变量。

而且我也没有看到你在任何地方更改$task_id。这是所有代码吗?因为否则您总是试图查询相同的task_id。你需要在while循环中改变它。

如前所述,$res将在{while循环中保留false。如果您只是在while循环后打印$res并且不在循环中使用它,那么这不应该是一个问题。