如何在codeigniter代码中使用两个或多个存储过程?

时间:2017-10-26 07:02:53

标签: php mysql codeigniter stored-procedures

我正在开展Codeigniter项目,我正在使用stored procedures进行后端操作。当我使用单stored procedure作为SELECT语句时,它会正常工作。但是,当我试图为同一个操作调用两个或更多stored procedures时,它会给我一个错误。

错误:

  

发生数据库错误

     

错误号码:2014

     

命令不同步;你现在不能运行这个命令

     

调用all_Cluster()

     

文件名:C:/xampp/htdocs/prop/system/database/DB_driver.php

     

行号:691

这是我的代码:

型号:

public function getProperty()
    {
        $query = $this->db->query('call select_prop_SP()');
        // if ($query->num_rows() > 0) {
        return $query->result();
        $query->next_result(); 
        $query->free_result();
    }
public function area()
    {
         $query = $this->db->query('call select_area_SP()');
        // if ($query->num_rows() > 0) {
        return $query->result();
        $query->next_result(); 
        $query->free_result();
    }
public function cluster()
    {
        $query = $this->db->query('call select_Cluster_SP()');
        // if ($query->num_rows() > 0) {
        return $query->result();
        $query->next_result(); 
        $query->free_result();
    }

这是我的SP:

select_area_SP

BEGIN
SELECT `area_id`, `area_name`, `area_status` FROM `tbl_area`;
END

select_Cluster_SP

BEGIN
SELECT `cluster_id`, `cluster_name`, `area_id`, `cluster_status` FROM `tbl_cluster`;
END

我用谷歌搜索了很长时间,但我没有得到任何积极的结果。 我经历过Calling stored procedure in codeigniter 并做出所有改变,但没有成功。

感谢任何形式的帮助。提前谢谢。

1 个答案:

答案 0 :(得分:1)

next_resultfree_result函数未执行,因为return句子退出函数。您必须在返回之前将结果存储在临时变量中:

public function cluster()
{
        $query = $this->db->query('call select_Cluster_SP()');
        $result = $query->result();
        $query->next_result(); 
        $query->free_result();
        return $result;
}

或者在每次存储过程调用后将配置更改为包含next_result函数的mysqli驱动程序:

$db['default']['dbdriver'] = 'mysqli';