CodeIgniter活动记录调用多个存储过程的问题

har*_*are 4 mysql stored-procedures codeigniter

class Registration_model extends CI_Model {

    function __construct() {
        parent::__construct();
    }   

    function check_email_availability($email)
    {
        $sql = "CALL proc_1301('$email');"; 
        $query = $this->db->query($sql) or die(mysql_error()); 
        return $query->row_array();
    }

    function check_username_availability($username)
    {
        $sqlt = "CALL proc_1303('$username');"; 
        $query = $this->db->query($sqlt) or die(mysql_error()); 
        return $query->row_array();
    }

    function process_registration($username, $email, $password)
    { 
        $sql = "CALL `proc_1302`('$username', '$email', '$password');"; 
        $query = $this->db->query($sql) or die(mysql_error()); 
        return $query->result_array();   
    }
Run Code Online (Sandbox Code Playgroud)

这是我的控制器代码,它从模型中逐个调用三个函数:

$emailCheckRes = $this->Registration_model->check_email_availability($email); 
$usernameCheckRes = $this->Registration_model->check_username_availability($username); 
$this->data['regRes'] = $this->Registration_model->process_registration($username, $email, $password);
Run Code Online (Sandbox Code Playgroud)

我的问题是当我只运行一个功能它运行成功,但当我运行其中两个或所有三个它显示空白页...任何想法为什么???

所以最后我们解决自己问题的唯一方法是:

/* ADD THIS FUNCTION IN SYSTEM/DATABASE/DB_ACTIVE_REC */
/* USAGE $this->db->freeDBResource($this->db->conn_id); */
function freeDBResource($dbh){
    while(mysqli_next_result($dbh)){
            if($l_result = mysqli_store_result($dbh)){
              mysqli_free_result($l_result);
            }
        }
}
Run Code Online (Sandbox Code Playgroud)

des*_*ste 5

该问题与CodeIgniter的活动重新调用和多个数据库存储过程调用有关.

首先检查dbdriver参数(application/config/database.php)是否设置为mysqli.然后,如在StackOverflow上的"从CodeIgniter的Active Record类调用存储过程"问题中所述,向system/database/DB_active_rec.php添加以下函数:

function freeDBResource($dbh){
    while(mysqli_next_result($dbh)){
            if($l_result = mysqli_store_result($dbh)){
              mysqli_free_result($l_result);
            }
        }
}
Run Code Online (Sandbox Code Playgroud)

..并在您的控制器中使用:

$this->db->freeDBResource($this->db->conn_id);
Run Code Online (Sandbox Code Playgroud)

在任何存储过程调用之后.