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

CodeIgniter 3按EAN搜索商品返回500错误求助

EAN码搜索返回500错误排查方案

问题背景

需求是实现EAN码搜索功能:输入EAN码后查询数据库,若存在则返回对应商品标题。涉及两张关联表:

  • products:存储EAN码,主键为id
  • product_details:存储商品标题,通过product_id字段关联products.id

当前异常:前端通过AJAX发送POST请求到ajax_controller的search_products方法时出现白页,控制台显示请求返回500错误。已在phpMyAdmin验证关联查询可正常返回结果,怀疑问题出在category_model的search_products_by_ean方法中。

排查与解决步骤

1. 捕获具体错误信息

500错误属于服务器内部错误,首先要拿到具体错误内容:

  • 在ajax_controller.php的search_products方法开头添加错误输出代码:
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
  • 或者直接查看服务器的PHP错误日志(比如Apache的/var/log/apache2/error.log,Nginx的/var/log/nginx/error.log),找到该请求对应的错误详情。

2. 检查Model层方法实现

确认search_products_by_ean方法的SQL逻辑和数据库操作无误:

public function search_products_by_ean($ean) {
    // 确保SQL关联和条件正确,使用参数绑定避免注入
    $sql = "SELECT pd.title 
            FROM products p 
            INNER JOIN product_details pd ON p.id = pd.product_id 
            WHERE p.ean = ?";
    $query = $this->db->query($sql, [$ean]);
    // 返回标题或false
    return $query->num_rows() > 0 ? $query->row()->title : false;
}
  • 检查是否已正确初始化数据库连接(比如$this->db是否可用)
  • 确认EAN参数是否完整传递,没有被转义或截断

3. 验证Controller层逻辑

确保search_products方法正确处理AJAX请求并返回合法JSON:

public function search_products() {
    // 仅处理AJAX请求
    if (!$this->input->is_ajax_request()) {
        show_404();
        exit;
    }
    
    $ean = $this->input->post('ean');
    if (empty($ean)) {
        echo json_encode(['success' => false, 'msg' => '请输入EAN码']);
        exit;
    }
    
    // 确保已加载Model
    $this->load->model('category_model');
    $productTitle = $this->category_model->search_products_by_ean($ean);
    
    if ($productTitle) {
        echo json_encode(['success' => true, 'title' => $productTitle]);
    } else {
        echo json_encode(['success' => false, 'msg' => '未找到对应商品']);
    }
    exit;
}
  • 检查是否存在多余的输出(比如空格、HTML注释),这会导致JSON解析失败
  • 确认Model已正确加载,避免调用未初始化的类方法

4. 前端请求校验

确保前端AJAX请求的参数、URL与后端匹配:

$('#search-btn').click(function() {
    const ean = $('#ean-input').val().trim();
    if (!ean) return alert('请输入EAN码');
    
    $.ajax({
        url: '/ajax_controller/search_products',
        type: 'POST',
        data: {ean: ean},
        dataType: 'json',
        success: function(res) {
            if (res.success) {
                $('#result').text('商品标题:' + res.title);
            } else {
                $('#result').text(res.msg);
            }
        },
        error: function(xhr) {
            console.error('请求失败:', xhr.statusText);
        }
    });
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 01:35:25