Проблемы активных записей 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();   
    }

это мой код контроллера, который вызывает три функции из модели одна за другой:

$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);

моя проблема в том, что когда я запускаю только одну функцию, она запускается успешно, но когда я запускаю две из них или все три, она показывает пустую страницу... есть идеи почему???

РЕШЕНИЕ

Наконец, единственное решение, которое мы получили для моей собственной проблемы:

/* 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);
            }
        }
}

2 ответа

Решение

Проблема связана с активными записями CodeIgniter и вызовом нескольких хранимых процедур базы данных.

Прежде всего проверьте, что для параметра dbdriver (application / config / database.php) установлено значение mysqli. Затем, как описано в разделе "Вызов хранимой процедуры из класса Active Record класса CodeIgniter" в Stackru, добавьте в 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);
            }
        }
}

..А в вашем контроллере используйте:

$this->db->freeDBResource($this->db->conn_id);

после любого вызова хранимой процедуры.

Модель и контроллер, похоже, в порядке. Если вы попробуете такую ​​модель как:

class Test_model extends CI_Model
{
   function __construct()
   {
      parent::__construct();
   }
   function a($a_input)
   {
      return($a_input.': a');
   }
   function b($b_input)
   {
     return($b_input.': b');
   }
}

... и вызвать его из контроллера следующим образом:

$this->load->model('Test_model');
    $a_result = $this->Test_model->a('aaa');
    $b_result = $this->Test_model->b('bbb');
    echo($a_result.'<br />'.$b_result);

Вы можете видеть, что несколько вызовов функций работают нормально.

Вы уверены, что можете правильно выполнить любую из трех функций в модели, если вызываете только одну? Если да, возможно, проблема может быть найдена в ваших хранимых процедурах... Можете ли вы попытаться выполнить обычный запрос вместо хранимых процедур в функциях модели? Для отладки вашей проблемы проверьте также в вашем /application/config/database.php, если db_debug установлен в TRUE.

Другие вопросы по тегам