我们的网站有一个功能,可以抓取所有导航项和子导航项,如下所示:
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'的水平,堕胎!
答案 0 :(得分:2)
该消息来自PHP,因为您多次重复进入setNav。
除非您的导航树最终导致一百个条目深入,否则我怀疑您调用getData可能会出现问题。
你能确定它返回有效的条目吗?
另外,正如a1ex07所说,如果可能的话,最好使用某种递归查询,而不是递归调用非递归查询。
答案 1 :(得分:2)
此限制由xdebug设置。检查你的php.ini并注释掉加载xdebug库的行,然后重启你的web服务器。
除此之外,您可能希望重构代码以便将来使用嵌套集。
答案 2 :(得分:2)
对于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
"
);