Команды не синхронизированы;Вы не можете запустить эту команду сейчас при вызове хранимой процедуры в Mysql - PullRequest
5 голосов
/ 10 марта 2012

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

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 Ответ

4 голосов
/ 10 марта 2012

Таким образом, вам нужно иметь дело с дополнительными наборами результатов, генерируемыми хранимой процедурой. Драйвер 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 (), чтобы потерять ожидаемый посторонний результат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...