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.
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;}