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

