繁体   English   中英

PHP 中的递归导航 function(mssql -> sqlsrv 问题)

[英]Recursive navigation function in PHP (mssql -> sqlsrv problem)

我们的网站有一个 function ,它抓取所有导航项和子导航项,如下所示:

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 的新版本后,它会抛出一个错误说:

致命错误:最大 function 嵌套
达到'100'的水平,中止!

该消息来自 PHP,因为您递归到 setNav 的次数太多。

除非您的导航树最终包含一百个条目,否则我怀疑您对 getData 的调用可能会出现问题。

你能确保它返回有效的条目吗?

此外,正如 a1ex07 所说,如果可能的话,您最好使用某种递归查询,而不是递归调用非递归查询。

此限制由 xdebug 设置。 检查您的 php.ini 并注释掉加载 xdebug 库的行,然后重新启动您的 web 服务器。

除此之外,您可能希望将来重构代码以使用嵌套集。

对于 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
  "
);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM