我们的网站有一个函数,可以抓取所有的导航项和子导航项,如下所示:
function setNav($sectionID = 0) {
$divs = $db->getData("SELECT *
FROM table
WHERE Section = ".$sectionID);
foreach ($divs as $div) {
$subArray = setNav($div['ID']);
$thisArray[$div['ID']]['ID'] = $div['ID'];
$thisArray[$div['ID']]['Title'] = $div['Title'];
$thisArray[$div['ID']]['Children'] = $subArray;
}
return $thisArray;
}
当我们使用mssql_函数时,它工作得很好,但由于切换到PHP的新版本,它贬值了,它抛出一个错误说:
致命错误:最大函数嵌套
达到"100"级别,中止!
这个限制由xdebug设置。检查php.ini并注释掉加载xdebug库的行,然后重新启动web服务器。
除此之外,您可能希望重构您的代码,以便在将来使用嵌套集。
这个消息来自PHP,因为你递归setNav太多次了
除非你有一个最终有100个条目深度的导航树,否则我怀疑你对getData的调用可能出了问题。
你能确保它返回的是有效的条目吗?
另外,正如a1ex07所说,如果可能的话,最好使用某种递归查询,而不是递归调用非递归查询。
对于SQL Server 2005及更高版本,您可以这样写:
$divs = $db->getData("
WITH tableCTE AS
(SELECT *
FROM table
WHERE Section = ".$sectionID. "
UNION ALL
SELECT t2.* FROM tableCTE t1
INNER JOIN table t2 ON (t2.id = t1.Section)
)
SELECT * FROM tableCTE
"
);