Вызов нескольких хранимых процедур из Codeigniter последний результат содержит предыдущий

Я использую эту библиотеку в Codeigniter для извлечения нескольких наборов результатов из хранимых процедур:

class Multi_Results
{
   private $CI, $Data, $mysqli, $ResultSet;

   /**
   * The constructor
   */

   function __construct()
   {
     $this->CI =& get_instance();
     $this->Data = '';
     $this->ResultSet = array();
     $this->mysqli = $this->CI->db->conn_id;
   }

    public function GetMultiResults($SqlCommand)
    {
        /* execute multi query */
        if (mysqli_multi_query($this->mysqli, $SqlCommand)) {
            $i=1;
            do
            {
                if ($result = $this->mysqli->store_result()) 
                {
                    while ($row = $result->fetch_assoc())
                    {
                        $this->Data[$i][] = $row;
                    }
                    mysqli_free_result($result);
                }
                $i++; 
            }
            while ($this->mysqli->more_results() && $this->mysqli->next_result());
        }
        return $this->Data;
    }

}

Я вызываю процедуру из контроллера как

$result_array = $this->multi_results->GetMultiResults("CALL procedure_name($input_1, '$input_2')");

Он делает то, что должен делать. Проблема возникает, когда я вызываю 2 РАЗНЫХ процедуры из контроллера один за другим и присваиваю результаты различным переменным. Когда я var_dump второй (последний) результат, он также содержит набор результатов из 1-го результата. Я проверил соединение dbdriver в database.php (установлено MSQLI), я попытался реализовать некоторые предложения, такие как: проблемы с активными записями CodeIgniter при вызове нескольких хранимых процедур и вызове хранимой процедуры из класса Active Record CodeIgniter. Оба они предлагают решение с mysqli_free_result, однако, это уже сделано в библиотеке аддонов (как вы можете видеть в фрагменте кода выше).

Любое предложение будет высоко оценено!

1 ответ

Решение

Инициировать $this->data = '' вместо функции GetMultiResults() в конструктор. Я думаю, что это решит вашу проблему.

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