PHP函数返回don';不起作用


PHP function return don't work

我有个问题。我编写了这个函数来从我的DB实体恢复以前的分支,我希望该函数返回一个字符串,其中我可以看到这些信息。这是代码:

function stampaOggettoCollezione($tipoOggetto, $id, $connection, $percorso="")
{
    $i=0;
    switch($tipoOggetto)
    {
        case 'casaeditrice':
            return $percorso;
            break;
        case 'storia':
            $dati = array("storia", "IDCasaEditrice", "casaeditrice");
            break;
        case 'testata':
            $dati = array("testata", "IDStoria", "storia");
            break;
        case 'albo':
            $dati = array("albo", "IDTestata", "testata");
            break;
    }
            $sql = "SELECT * FROM ".$dati[0]." WHERE ID=$id";
            $result=mysqli_query($connection,$sql);
            $IDSuperiore=mysqli_fetch_array($result)[$dati[1]];
            $sql = "SELECT * FROM ".$dati[2]." WHERE ID=$IDSuperiore";
            $result = mysqli_query($connection, $sql);
            $nomeSuperiore=mysqli_fetch_array($result)['nome'];
            $percorso = $percorso . $nomeSuperiore;
            stampaOggettoCollezione($dati[2], $IDSuperiore, $connection, $percorso);
}

我确信代码是有效的,我在代码中尝试一些echo来检查最终路径。我的问题是我不能在网页中像字符串一样写返回。你觉得怎么样?申报单有问题吗?感谢

我不确定我是否理解,因为英语很难理解,但似乎你只需要写:

return $result;

在函数末尾,或者您想要返回的任何字符串变量。然后在函数之后使用echo stampaOggettoCollezione(arguments...)以使该值得到响应。

更换

stampaOggettoCollezione($dati[2], $IDSuperiore, $connection, $percorso);

带有

return stampaOggettoCollezione($dati[2], $IDSuperiore, $connection, $percorso);

您必须将$percorso从所有对stampaOggettoCollezione的调用中一直传递回原始调用。在Internet上阅读有关递归的更多信息。

或者,我相信如果您更改函数以构建一个在表上联接的查询,也可以达到同样的效果。它将消除递归的需要,减少数据库调用的次数,并且应该在不更改任何内容的情况下工作,只更改函数本身。

//根据要查询的初始表动态查询更多的表函数stampaOggettoCollezione($tipoOggetto,$id,$connection,$percorso="){$selectQuery="SELECT";$columnsToSelect=";$fromQuery=";$whereClause="WHERE";开关($tipoOggetto){案例"albo":$columnsToSelect.=",a.nome AS aNome";$fromQuery="LEFT JOIN albo a ON t.ID=a.IDTestata";案例"testata":$columnsToSelect.=",t.nome AS t名称";$fromQuery="LEFT JOIN testata t ON s.ID=t.IDStoria"。$fromQuery;案例"storia":$columnsToSelect.=",s.nome AS sNome";$fromQuery="LEFT JOIN storia s ON ce.ID=s.IDCasaEditrice".$fromQuery;案例"casaediace":$columnsToSelect.=",ce.nome AS ceNome";$fromQuery="FROM案例分析"$fromQuery;打破}//移除第一个``$selectQuery.=substr($columnsToSelect,2);开关($tipoOggetto){案例"casaediace":$where条款="c.ID=$ID";打破案例"storia":$where条款="s.ID=$ID";打破案例"testata":$where条款="t.ID=$ID";打破案例"albo":$where条款="a.ID=$ID";打破}$qry=$selectQuery$fromQuery$其中条款;$result=mysqli_query($connection,$sql);$nomeSupiore=";$nomes=mysqli_fetch_array($result);//可能需要一些工作才能按正确的顺序输出foreach($nomes作为$nome)$nomeSupiore.=$nome;return$nomeSupiore;}