CodeIgniter生成PDF证书时无法按传入ID展示对应学生姓名
CodeIgniter电子证书系统姓名传递异常解决指南
异常根因定位
- 控制器层存在两处逻辑断层:
- 完成学生信息SQL查询后,未正确从查询结果中提取纯姓名字段值,且完全未将姓名变量传入视图,仅把URL段传入的原始学生ID(即
$uri4)赋值给视图参数传递给证书页 - 直接用
result_array()方法接收查询结果时,未对返回的嵌套数组结构做取值处理,直接将数组替换原ID值传给视图时,因数据结构不匹配导致页面渲染失败
- 完成学生信息SQL查询后,未正确从查询结果中提取纯姓名字段值,且完全未将姓名变量传入视图,仅把URL段传入的原始学生ID(即
- 基础业务上下文:
- 核心逻辑为点击触发后,通过URL传入的学生ID匹配
m_siswa表记录,生成可导出PDF的正式证书 - 关联表
m_siswa核心字段为id_siswa(学生ID,示例值9720)、nama(学生姓名) - 证书视图
v_sertifikat已预留姓名展示位,因控制器传参缺失导致最终PDF仅显示原始ID值
- 核心逻辑为点击触发后,通过URL传入的学生ID匹配
可落地修复步骤
- 修正查询逻辑,正确提取学生姓名
原错误写法:用
result_array()接收查询结果后未取值,直接将数组赋值给$nama变量
参考正确代码:// 接收URL第4段传入的学生ID $id_siswa = $this->uri->segment(4); // 预编译SQL查询,避免SQL注入 $query = $this->db->query("SELECT nama FROM m_siswa WHERE id_siswa = ?", [$id_siswa]); // 单条记录查询场景,用row_array()获取一维数组结构,替代原result_array() $student_info = $query->row_array(); // 提取纯姓名字段值 $student_name = $student_info['nama']; - 修正视图传参逻辑
原错误写法:仅将
$uri4赋值给视图变量,未传入查询得到的姓名
参考正确代码:// 整理传递给证书视图的参数,同时包含ID和姓名 $view_params = [ 'id_siswa' => $id_siswa, 'student_name' => $student_name ]; // 加载证书视图 $this->load->view('v_sertifikat', $view_params); - 调整视图层渲染逻辑
打开v_sertifikat证书视图文件,将预留姓名展示位的输出变量从原引用的ID值,替换为传入的$student_name即可。 - 增加异常兜底判断
在控制器中补充空值校验,避免传入无效ID时页面抛出未定义变量错误:if (empty($student_info)) { show_error('未匹配到对应学生信息,无法生成证书', 404); }
高频踩坑提示
- 不要在单条查询场景下直接使用
result_array()作为传值参数:result_array()返回的是二维嵌套数组结构,直接渲染会导致页面输出数组结构报错,单条精准匹配查询优先使用row_array() - 确保查询条件匹配的字段正确:核对
WHERE子句中匹配的字段为m_siswa表的id_siswa,而非表的自增主键ID,避免因字段不匹配导致查询结果为空
内容的提问来源于stack exchange,提问作者Alexander Ws
相关产品推荐
相关产品推荐

