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

CodeIgniter中分类select联动子分类下拉框失效且报SQL错误

问题分析与修复方案

核心问题1:SQL语法错误根因

  • 你传递的category是分类名称(字符串类型),直接拼接进SQL语句时没有加引号,就算成功拿到分类值也会触发语法错误。
  • 当$this->input->post('category')未获取到有效值时,SQL拼接后变成SELECT name FROM subcategory WHERE parentcategory=,就是你控制台看到的报错内容。
  • 直接拼接SQL还存在SQL注入风险,不符合CodeIgniter的安全开发规范。

核心问题2:控制器返回内容错误

你在加载子分类视图后额外执行了echo $category;,会导致返回给前端的内容是<option>标签 + 分类名文本,插入到select标签后会破坏下拉选项结构,就算SQL执行正确也无法正常渲染子分类。

可选优化点

建议父分类<option>的value用分类ID而非名称,查询效率更高,也能避免分类名重复带来的查询异常。

修复后代码

控制器subcategories方法

public function subcategories() {
    // 增加参数非空校验,避免无意义的SQL查询
    $category = $this->input->post('category');
    if(empty($category)) {
        exit;
    }
    // 使用CodeIgniter查询绑定,自动加引号、防注入
    $query = $this->db->query('SELECT name FROM subcategory WHERE parentcategory = ?', [$category]);
    $data['subcategories'] = $query->result_array();
    // 仅加载视图,删除多余的echo语句
    $this->load->view('homecontroller/subcategories', $data);
}

(可选优化)主视图分类下拉框修改

如果你的分类表有主键ID,建议将value改为分类ID,同步修改SQL的查询字段为对应父分类ID字段即可:

<select id="sl_countries" class="form-control" name="cname" aria-label="Default select example">
<?php
 foreach($listcategory as $val){
  echo '<option value="'.$val->id.'">'.$val->name.'</option>';
 }?>
</select>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 17:48:01