Вызов нескольких хранимых процедур из 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() в конструктор. Я думаю, что это решит вашу проблему.