You need to enable JavaScript to run this app. CodeIgniter控制器调用模型时response_num传值为空问题排查
优惠活动
大模型
产品
解决方案
定价
更多

CodeIgniter控制器调用模型时response_num传值为空问题排查

CodeIgniter 模型参数传值为空问题排查

核心根因

你模型方法的第一个形参定义存在非法语法,直接导致参数绑定失效,这也完全匹配你观察到的现象——后面两个形参的变量名格式合法,能正常接收对应传入的值,只有第一个形参收不到传值、打印结果为空。

你当前的模型方法定义为:

public function get_possible_results_for_response($*response_num*=FALSE, $assess_id, $registrant_id){
    print_r("response_num=".$response_num.";  assess_id=".$assess_id.";  registrant_id=".$registrant_id);
}

这里第一个形参写为$*response_num*,变量名中嵌入了星号*,完全不符合PHP变量命名规则:PHP变量必须以$开头,后续字符需是字母、下划线(后续可跟数字、字母、下划线),不能夹杂*这类特殊符号。
这种非法写法下,PHP运行时根本无法把控制器传入的第一个参数值,绑定到这个格式错误的变量上,自然打印出来的response_num是空值。

修正与进一步排查建议

  • 第一步:修正形参的非法变量名,删掉多余的星号,改成合法的$response_num
  • 第二步:调整形参的声明顺序,遵循PHP函数定义规范——带默认值的形参必须放在无默认值形参的后方,否则容易在不同PHP版本下出现参数错位绑定的问题。你现在把带默认值的$response_num放在第一位,后面两个无默认值的$assess_id、$registrant_id放在后面,即使修改变量名,也存在参数错位风险。调整后的方法定义参考:
    // 无默认值参数放前面,带默认值的放最后
    public function get_possible_results_for_response($assess_id, $registrant_id, $response_num = FALSE)
    
  • 第三步:调整对应控制器的调用代码,把参数顺序和新的形参顺序对齐,避免传值错位:
    $g1 = $this->Response_model->get_possible_results_for_response(
        $this->session->userdata("assess_id"),
        $this->session->userdata("user_id"),
        $i // 最后传带默认值的response_num参数
    );
    

完成上述修正后,再打印调试值,即可看到循环计数变量$i能被模型方法正常接收,数据库查询逻辑也能正常执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.31 09:54:04