执行时间超过

时间:2013-12-21 20:40:18

标签: php mysql pdo

我正在尝试将获取的数据数组存储到会话中,使用下面的代码,但是当我尝试执行它时,执行时间超过30秒并且失败。 我似乎无法发现错误,所以我希望能有所帮助。

public function stat_query($user_id = null) 
{
$query = $this->core->conn->query("SELECT user_stats.value as value, stats.shortname as shortname FROM user_stats  INNER JOIN stats ON user_stats.stat_id = stats.id WHERE user_stats.user_id = ".$this->get_user($user_id));
$value = $query->fetch(PDO::FETCH_ASSOC);
return $value;
}

public function init_stat_array($user_id = null){
    while($query = $this->stat_query($this->get_user($user_id))) {
        $this->temp_array[$query['shortname']] = $query['value'];
    }
}

public function store_session($user_id = null) {
    $this->init_stat_array($this->get_user($user_id));
    $_SESSION['stats'] = $this->temp_array;
}

注意:get_user函数按预期工作,它只返回绑定在构造函数中的用户或输入的用户。

2 个答案:

答案 0 :(得分:1)

stat_query启动查询并获取第一行。它将无限期地运行,因为它应该返回带有$this->get_user($user_id)参数的真实结果,并且该参数不会改变。解决此问题的最简单方法是删除while,因为该查询应该只返回一行(我假设user_id是规范的)。

您也可以从该方法返回结果集($query)并在另一种方法中迭代它。你只需要在外部打电话给fetch

我认为您可能希望循环的是init_stat_array,因为对于user_ids数组运行stat_query是有意义的。

答案 1 :(得分:1)

while循环不起作用。在fetch_assoc while ($row = $this->core->conn->fetch()上使用while,因为fetch方法旨在以这种方式工作。将fetch方法的返回值分配给变量(或方法返回值)后,在其上运行while()将无法在fetch方法上运行while(),但是正在运行{{ 1}}你的方法。因此,如果方法在将$ value传递给它时返回非false值,则while()始终为true。

如果一个方法返回一个数组,那么while是一个过度杀手,因为你需要使用while($this->yourMethod($value))和其他一些函数来与数组交互。在您的情况下,您需要key()

foreach()