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

CodeIgniter模型函数可echo输出但无法return返回值的解决方法

解决递归函数无返回值的问题

嘿,这个问题其实很常见——你的递归调用里漏掉了return语句,导致递归的结果无法传递回最外层的函数调用。

先看你的原代码:

function exist_kode($kode = 1) { 
    $get = $this->db->query("SELECT * FROM perkiraan WHERE kode_perk='$kode'"); 
    if($get->num_rows() == 0) { 
        return $kode; 
    } else { 
        $this->exist_kode((int)$kode+1); 
    } 
}

问题根源

当$kode在数据库中存在时,你进入else分支调用了递归函数,但没有把递归调用的结果返回给当前函数的调用者。也就是说,递归到最后一层确实返回了正确的$kode,但上层的函数没有把这个值传递回去,导致最外层调用时拿不到任何返回值。

而用echo能输出是因为每一层递归执行时都会直接打印值,但这并不是函数返回的结果,只是中途的输出而已。

修正后的代码

只需要在else分支的递归调用前加上return,让递归的结果逐层传递回去:

function exist_kode($kode = 1) { 
    $get = $this->db->query("SELECT * FROM perkiraan WHERE kode_perk='$kode'"); 
    if($get->num_rows() == 0) { 
        return $kode; 
    } else { 
        // 关键:返回递归调用的结果,让值逐层传递回最外层
        return $this->exist_kode((int)$kode+1); 
    } 
}

额外安全建议

另外,为了避免SQL注入风险,建议使用参数绑定的方式执行查询,比如:

$get = $this->db->query("SELECT * FROM perkiraan WHERE kode_perk = ?", [$kode]);

这样能更安全地处理动态参数,避免恶意输入带来的安全问题。

内容的提问来源于stack exchange,提问作者Mfdsix Indo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:11:27