这种模型结构是否容易出现无限循环?

时间:2012-05-21 03:45:07

标签: php mysql sql codeigniter infinite-loop

我正在尝试在我的codeigniter应用程序上调试一个问题,其中我的服务器返回500错误,因为当我尝试加载包含多个帖子的页面时它会永远挂起。

此错误是间歇性的。 10次​​中的7次,我的页面加载速度快,CI的分析器显示执行时间< 0.6。

此模型使用此结构,其中将根据正在进行的请求(即,我的帖子,收藏夹,其他帖子)插入不同的FROM子句。没有SQL错误,没有PHP错误。只有显着的处理延迟和一些Apache错误,如

[Sat May 19 21:27:21 2012] [warn] mod_fcgid: process 21174 graceful kill fail, sending SIGKILL
[Sat May 19 21:27:27 2012] [notice] mod_fcgid: process /var/www/vhosts/example.com/httpdocs/blog/index.php(21174) exit(communication error), get stop signal 9

这种SQL模型是否容易出现无限循环或其他一些问题,这些问题可能会证明我的服务器是疯狂的?

class Home_model extends CI_Model {

    function __construct()
    {
        parent::__construct();
    }

    function count_posts($author_id = NULL, $section = NULL, $user_id = NULL, $origin = NULL)
    {
        $clause = $this->clause($author_id, $section, $user_id, $origin);

        $query = $this->db->query("
        SELECT  *
        $clause
        ");

        return $query->num_rows;
    }

    function clause($author_id, $section, $user_id, $origin = NULL)
    {
        if ($section == 'favorites') {

            $clause  = "FROM post RIGHT JOIN favorites ON post_id_fk = post_id WHERE user_id_fk = $user_id";

        } elseif (($section == 'posts') AND ($origin == 'user')) {

            $clause = "FROM post WHERE post_author_id = $author_id";

        } else {

            if ($author_id == NULL) {

                $clause = "FROM post";

            } else {

                $clause = "FROM post WHERE post_author_id = $author_id";
            }
        }

        return $clause;
    }
}

1 个答案:

答案 0 :(得分:0)

我猜你在视图中做了类似

的事情
for ($i=0; $i<$this->count_posts(); $i++){
         // show posts
  }

您能发布您的观看代码吗?

但鉴于你可能正在做类似的事情 - 假设你的模型中的count_posts()函数可能返回一个错误的数字,导致你的循环变得无限,这是合理的。

要调试它,请执行类似

的操作
//for ($i=0; $i<$this->count_posts(); $i++){
         // show posts
// }
echo $count_posts();

并查看输出是否始终符合您的预期......