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
相关产品推荐
相关产品推荐

