运行递归时出错

时间:2010-06-14 17:03:30

标签: php

如果运行函数返回服务器配置错误

    function build_path($cid)
    {
        $result = array();
        $DB = new MySQLTable;
        $DB->TblName = 'shop_categories';
        $where['cat_id']['='] = $DB->CleanQuest($cid);
        $res = $DB->Select('cat_id,cat_name,cat_parent', $where);
        if($res !== 'false')
        {
            $pid = mysql_fetch_array($res);
            if($pid['cat_parent'] !== 0)
            {
                Echo $pid['cat_parent'];
                build_path($pid['cat_parent']);
            } else {
                Echo $pid['cat_id'];
                return true;
            }
        }
        return false;
    }

我在这里找不到错误。请帮忙。

抱歉打扰了你们所有人。问题是比较'if($ pid ['cat_parent']!== 0)':$ pid ['cat_parent']是一个带有int(0)的字符串

我可以构建此函数来存储完整路径而不使用GLOBALS和SESSION变量吗?

1 个答案:

答案 0 :(得分:0)

要检查的事项:

  1. cat_parent是否永远为空?
  2. 是否有任何递归的父对(A是B的父,B是A的父级; A-> B,B-> C,C-> A)?
  3. 是否存在行是自我父级的情况(A是A的父级)
  4. 尝试进行此修改(用于调试):

    function build_path($cid) {
        static $done = array();
        if (isset($done[$cid])) {
            throw new Exception('We have already looked up CID: '.$cid);
        } else {
            $done[$cid] = true;
        }
        //.......
    }
    

    这将让你知道你是否有一个递归循环。

    另外,将error_reporting设置为max,然后检查错误日志。我的猜测是,它是堆栈溢出(你的递归过深)或内存限制问题(它耗尽了太多的内存并被杀死)......