Code Igniterでストアドプロシージャを使用するとエラーになる件

php

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の容量を増やして上げましょう。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です