2010-06-14 96 views
0

如果運行函數返回服務器錯誤配置錯誤錯誤在運行遞歸

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; 
    } 

我不能在這裏找到一個錯誤。請幫忙。

對不起,打擾你們所有人。麻煩是比較'如果($ pid ['cat_parent']!== 0)':$ pid ['cat_parent']是一個字符串與int(0)

我可以建立此函數來存儲完整路徑不使用GLOBALS和SESSION變量?

+0

什麼是完整錯誤? – 2010-06-14 17:07:47

+0

500內部服務器錯誤 – GOsha 2010-06-14 17:16:26

+1

錯誤日誌中有什麼?另外,在類型敏感模式下檢查$ res對字符串'false'是無意義的。你的意思是'if($ res!== false)'而不是? – Charles 2010-06-14 17:24:58

回答

0

要檢查的事項:

  1. 是有史以來cat_parent空?
  2. 是否存在遞歸父對(A是B的父親,B是A的父親; A-> B,B-> C,C-> A)?
  3. 是那裏的行自父任何情況下(A是A的母公司)

試着做此修改(調試):

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設置爲最大,並檢查您的錯誤日誌。我的猜測是它要麼是堆棧溢出(你的遞歸太深了),要麼是內存限制問題(它會佔用太多的內存並被終止)......