CodeIgniter 3中$this->session->userdata('user_id')无效,id_user存为null怎么解决?
解决CodeIgniter 3中lowongan表id_user存入null的问题
以下是逐一排查和解决的步骤:
1. 确认Session是否正常加载且user_id存在
- 检查Session库加载状态:
打开application/config/autoload.php,确认$autoload['libraries']数组包含'session';如果没有,要么修改autoload配置,要么在store_lowongan方法开头添加$this->load->library('session');。 - 调试Session中的user_id值:
在控制器的store_lowongan方法里,获取user_id后立刻打印调试:
如果输出是null,说明用户登录时没有把$id_user = $this->session->userdata('user_id'); var_dump($id_user); // 查看输出是否为null exit;user_id写入Session。需要补充登录逻辑,登录成功后执行:// 假设登录时从users表查询到用户数据$user $this->session->set_userdata('user_id', $user->user_id);
2. 检查数据库表字段设置
- 核对
lowongan表的id_user字段:- 字段名称是否和代码中的
id_user完全一致(注意Linux环境下MySQL区分表名/字段名大小写); - 字段类型是否和
users表的user_id匹配(比如均为INT类型); - 如果业务上
id_user是必填项,检查字段是否设置为NOT NULL,避免无值时存入null。
- 字段名称是否和代码中的
3. 查看实际执行的SQL语句
在调用模型插入数据后,打印最后执行的SQL,确认id_user是否被正确传入:
$this->m_lowongan->input_data($data, 'lowongan'); echo $this->db->last_query(); // 输出完整的INSERT语句 exit;
如果SQL中id_user的值是NULL,说明$data['id_user']本身就是null,回到第一步排查Session问题;如果SQL里有正确数值,检查数据库是否有触发器或其他规则导致值被覆盖。
4. 排除其他覆盖逻辑
- 确认模型的
input_data方法没有对传入的$data做过滤或修改(你的模型代码无相关操作,可快速跳过); - 检查表单是否有同名的
id_user隐藏字段,避免意外覆盖Session取值(你的代码从Session取值,不受POST值影响,可作为补充验证)。
内容的提问来源于stack exchange,提问作者Nicho
相关产品推荐
相关产品推荐

