You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CodeIgniter关联查询报Unknown column错误的解决求助

问题解决步骤

错误根源分析

  1. SQL语法错误:直接拼接字符串变量$kode到SQL语句中,字符串类型的HG01未被引号包裹,数据库将其识别为列名,触发1054 Unknown column错误。
  2. 查询字段错误:SELECT语句里的matkul是表名,不是有效字段,必须指定具体字段(比如课程名称,假设字段名为nama_matkul,请根据实际表结构调整)。
  3. 未返回查询结果:studidos()函数执行查询后没有return结果,导致视图无法获取数据。
  4. 冗余JOIN操作:matkul表本身包含kode_dosen字段,无需关联dosen表,直接过滤即可。

修正后的Model代码

public function studidos() {
    // 获取当前登录教师的kode_dosen
    $studos = $this->M_Dosen->sedo();
    $kode = $studos['kode_dosen'];
    
    // 使用CodeIgniter查询构造器(自动处理字符串引号,更安全)
    $this->db->select('kode_dosen, kode_matkul, nama_matkul'); // 替换nama_matkul为实际课程名字段
    $this->db->from('matkul');
    $this->db->where('kode_dosen', $kode);
    
    // 返回查询结果
    return $this->db->get()->result_array();
}

若坚持使用原生SQL,需给变量加单引号,同时用预处理语句防SQL注入:

$query = "SELECT kode_dosen, kode_matkul, nama_matkul FROM matkul WHERE kode_dosen = ?";
return $this->db->query($query, [$kode])->result_array();

控制器补充(确保数据传给视图)

在对应控制器方法中,调用model并将数据赋值给视图:

public function input_nilai() {
    $data['sedo'] = $this->M_Dosen->sedo();
    $data['studidos'] = $this->M_Dosen->studidos();
    
    $this->load->view('nilai_input', $data);
}

视图调整(匹配字段名)

如果课程名字段是nama_matkul,修改视图循环部分:

<div class="form-group">
  <label for="exampleFormControlSelect1">Kode Matkul</label>
  <select class="form-control" id="exampleFormControlSelect1" name="kode_matkul">
    <?php foreach($studidos as $stud) : ?>
    <option value="<?= $stud['kode_matkul']; ?>"><?= $stud['nama_matkul']; ?> (<?= $stud['kode_matkul']; ?>)</option>
    <?php endforeach; ?>
  </select>
</div>

关键注意事项

  • SQL注入防护:优先使用CodeIgniter查询构造器或预处理语句,避免直接拼接用户可控变量到SQL中。
  • 字段名匹配:确保SELECT语句中的字段名与数据库表实际字段一致,避免字段不存在的错误。
  • 数据返回检查:确认model函数return了查询结果,否则视图无法获取数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 08:01:05