Команды не синхронизированы; вы не можете запустить эту команду сейчас, когда вызываете хранимую процедуру в Mysql

Я пытаюсь запустить процедуру, я получаю эту ошибку

Commands out of sync; you can't run this command now

вот исходная ошибка, которую я получаю

Команды не синхронизированы; вы не можете запустить эту команду сейчас

SELECT DISTINCT `property_id`, `pin`, `block_id`, `serial_no`, `status`, `ex_sn`, `ex_code`, `property_date_time`, `street_add`, `lab_name` FROM `view_property_user_lab` WHERE status = '6' AND lab_id = '01' AND designation IN( '5','6') LIMIT 10

может ли кто-нибудь сказать мне, почему я получаю эту ошибку и как избавиться от нее. Я использую воспламенитель кода, и я также пробовал это

$query->free_result().

в моей процедуре я использовал этот оператор

SELECT *
 FROM
 temp_calculated_rates_and_rules;
 -- and then
 TRUNCATE temp_calculated_rates_and_rules;

поскольку эта вещь вызывается в PHP Loop, которая похожа на это

$arrIds = array('5','10');
 foreach ($arrIds as $id)
 {
 $this->_StoredProcedureMapper->setPId($id);
 $p10values = $this->_StoredProcedureMapper->fetch_p10_values();
 if (intval(@$p10values[0]['is_exempted']) != 1)
 {
 $this->generate_p10($p10values);
 }
 }

и здесь - функция отображения

function fetch_p1_values()
{
 $qry = "CALL sp_main_pt10(?)";
 $result = $this->db->query($qry, $this->getPId());
 return $result->result_array();
}

И я использую драйвер "mysqli"

1 ответ

Итак, вам нужно иметь дело с дополнительными наборами результатов, сгенерированными хранимой процедурой. Драйвер mysqli предоставляет метод для этого, но CodeIgniter не может сделать этот метод доступным.

Из https://ellislab.com/forums/viewthread/73714/#562711:

Я просто добавил следующее в mysqli_result.php, который отсутствует эта команда по какой-то странной причине. (под /system/database/drivers/mysqli/mysqli _result.php)

// --------------------------------------------------------------------
 /**
 * Read the next result
 *
 * @return null
 */ 
 function next_result()
 {
 if (is_object($this->conn_id))
 {
 return mysqli_next_result($this->conn_id);
 }
 }
 // --------------------------------------------------------------------

Тогда в моей модели я просто вызываю $result- > next_result(), чтобы потерять ожидаемый посторонний набор результатов.

licensed under cc by-sa 3.0 with attribution.