CodeIgniter 3按EAN搜索商品返回500错误求助
EAN码搜索返回500错误排查方案
问题背景
需求是实现EAN码搜索功能:输入EAN码后查询数据库,若存在则返回对应商品标题。涉及两张关联表:
products:存储EAN码,主键为idproduct_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
相关产品推荐
相关产品推荐

