You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP递归函数无法返回最终ID问题求助

解决递归函数返回Null的问题

这个问题是递归函数里非常常见的坑!咱们来一步步拆解问题所在:

你的函数在if($get_numrows>0)分支里,只是调用了abc($dbcon,$get_rel['member_id']),但没有把这个递归调用的结果返回出去。当递归走到最底层的else分支返回$id时,这个值只会回到上一层的递归调用中,但上一层函数没有把它return出来,导致这个值在传递过程中“丢失”了,最终最外层调用自然拿到的是Null。

修改后的代码

function abc($dbcon,$id){ 
    $get_quy = "select * from member_mst where member_status=0 and pid=".$id; 
    $get_rs = $dbcon->query($get_quy); 
    $get_numrows = mysqli_num_rows($get_rs); 
    $get_rel = mysqli_fetch_assoc($get_rs); 
    if($get_numrows>0){
        // 关键:这里要return递归调用的结果,才能把值传递回上层
        return abc($dbcon,$get_rel['member_id']); 
    }else{ 
        return $id; 
    } 
} 

var_dump(abc($dbcon,1)); // 现在会正确返回最终的ID

额外的重要建议

你当前的SQL语句直接把变量$id拼接到查询字符串里,存在SQL注入风险。建议改用mysqli的预处理语句来避免这个问题,示例如下:

function abc($dbcon,$id){ 
    // 使用预处理语句,防止SQL注入
    $stmt = $dbcon->prepare("select member_id from member_mst where member_status=0 and pid=?");
    $stmt->bind_param("i", $id); // 假设id是整数类型,用"i";如果是字符串用"s"
    $stmt->execute();
    $result = $stmt->get_result();
    $get_numrows = $result->num_rows;
    $get_rel = $result->fetch_assoc();
    
    if($get_numrows>0){
        return abc($dbcon,$get_rel['member_id']); 
    }else{ 
        return $id; 
    } 
}

这样既解决了递归返回的问题,又提升了代码的安全性。

内容的提问来源于stack exchange,提问作者abhi chavda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:13:56