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

