我有个问题。我编写了这个函数来从我的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;}