MySQL Error - Commands out of sync; you can't run this command now MySQL Error - Commands out of sync; you can't run this command now codeigniter codeigniter

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


Got the Answer! It seems like codeigniter's mysql driver has bugs handling stored procedures.

I changed the drivers from mysql to mysqli in the config/database file by changing

$db['default']['dbdriver'] = 'mysql';

to

$db['default']['dbdriver'] = 'mysqli';

Post that i modified the system/database/drivers/mysqli/mysqli_result.php file and added the below function

function next_result(){  if (is_object($this->conn_id))  {      return mysqli_next_result($this->conn_id);  }}

and modified the model as below

$db = $this->load->database('mailbox',TRUE);$qry_res = $db->query('Call circle_pending_p()');echo $db->_error_message();$res = $qry_res->result_array();$qry_res->next_result();$qry_res->free_result();if (count($res) > 0) {      return $res;} else {      return 0;}

This solved the problem!


Try:

<?phpwhile($dbms->more_results() && $dbms->next_result())    {        $result = $dbms->store_result();        if(is_object($result)){ $result->free(); }        unset($result);    }?>

After procedure call. MySQLi can't call another procedure, while has previous results.You should use free() for each of them before any further procedure call or query execution.

Source: http://php.net/manual/en/mysqli.query.php


In file

system/database/drivers/mysqli/mysqli_result.php

Add:

function next_result(){    if (is_object($this->conn_id))    {        return mysqli_next_result($this->conn_id);    }}function result($type = 'object'){    $result = array();    if ($type == 'array') $result = $this->result_array();    else if ($type == 'object') $result = $this->result_object();    else $result = $this->custom_result_object($type);    $this->next_result();    return $result;}