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

CodeIgniter调用SQL Server存储过程查询失败,SQL工具执行正常求助

排查CodeIgniter中调用存储过程无返回数据的问题

我之前在CodeIgniter项目里也碰到过一模一样的问题——存储过程在数据库工具里跑完全正常,但放到CI里就返回空结果。结合你的代码片段,我梳理了几个最常见的原因和对应的解决办法:

1. 存储过程调用语法不符合数据库要求

不同数据库的存储过程调用语法差异很大:

  • 如果是MySQL,必须用CALL关键字触发存储过程,而不是直接写存储过程名加参数;
  • 如果是SQL Server,建议显式加上EXEC关键字,避免CI的数据库驱动解析错误。

修改你的Model代码(根据数据库类型二选一):

function GetDataByProc(){ 
    // MySQL版本
    $data = $this->db->query("CALL spCekSelisihJurnal('2018-01-01 00:00:00', '2018-12-31 23:00:00')");
    // SQL Server版本
    // $data = $this->db->query("EXEC spCekSelisihJurnal '2018-01-01 00:00:00', '2018-12-31 23:00:00'");
    return $data ; 
}

2. 日期格式不被数据库正确解析

你用的'1/1/2018 00:00:00'这种短日期格式,在部分数据库的严格模式下会被判定为无效参数,导致存储过程没有输出。建议换成标准的YYYY-MM-DD HH:MM:SS格式,这是所有关系型数据库都能识别的统一格式。

3. 存储过程返回多结果集,CI默认只取第一个

有些存储过程会返回多个结果集(比如包含执行状态码的额外结果),CI的result_array()默认只会读取第一个结果集,如果第一个结果集是空的,就会返回空数组。你需要手动跳过后续的空结果集:

修改Controller里的代码:

public function index(){ 
    $this->load->database(); 
    $this->load->model('model_contoh'); 
    $query = $this->model_contoh->GetDataByProc(); 

    $data = [];
    // 读取第一个有效结果集
    if ($query->num_rows() > 0) {
        $data = $query->result_array();
    }
    // 清理后续的空结果集,避免影响后续查询
    while ($this->db->next_result()) { 
        $this->db->free_result(); 
    }

    echo '<pre>' ; 
    print_r($data); 
}

4. CI使用的数据库用户没有执行权限

虽然你在本地SQL工具里能跑存储过程,但CI连接数据库用的账号可能没有EXECUTE该存储过程的权限。登录数据库给CI用户授予权限:

-- MySQL
GRANT EXECUTE ON PROCEDURE spCekSelisihJurnal TO 'ci_db_user'@'localhost';
-- SQL Server
GRANT EXECUTE ON spCekSelisihJurnal TO ci_db_user;

5. 用查询绑定替代硬编码参数(更安全也更兼容)

CI的数据库类有SQL注入防护机制,硬编码参数偶尔会被误判,改用查询绑定的方式不仅能避免这个问题,还能自动处理参数格式:

修改Model代码:

function GetDataByProc(){ 
    $start_date = '2018-01-01 00:00:00';
    $end_date = '2018-12-31 23:00:00';
    // MySQL版本
    $query = $this->db->query("CALL spCekSelisihJurnal(?, ?)", [$start_date, $end_date]);
    // SQL Server版本
    // $query = $this->db->query("EXEC spCekSelisihJurnal ?, ?", [$start_date, $end_date]);
    return $query;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:31:03