Commands out of syncエラーが出る
Code Igniterでストアドプロシージャを使用すると、Commands out of sync とエラーが出る為、調査しました。
結果として、CIのdbdriverにmysqlを設定していること、CIのメインシステムのDBをいじるところに関数を追加することで対処出来ました。
以下が、解決方法です。
application/config内のdatabase.phpで、mysqlをmysqliに変更。
$db['default']['dbdriver'] = 'mysqli';
system/database/drivers/mysqliのmysqli_result.phpに、以下の関数を追加。
/** * Next the result * @return null */ function next_result() { if (is_object($this->conn_id)) { mysqli_next_result($this->conn_id); } }
あとは、model側で上記の関数を挟みながら実行するだけです。
$sql = "CALL stad()"; $query = $this->db->query($sql); $res = $query->result_array(); $query->next_result(); $query->free_result(); return $res;
結構手こずりましたが、これで一応動くようになりました。
あと、これは別件ですが、ストアドでデータを貯めてたりすると、Thread stack overrunで怒られたりします。
その場合は、my.cnf内のthread_stackの容量を増やして上げましょう。