CodeIgniterを使用していて複数のデータベースへ接続したい機会というのがあると思います。
今回は、CodeIgniterを使用し、複数のデータベースへ接続する方法を紹介します。
CodeIgniterを使用し複数のデータベースに接続するのにBESTな方法は、1つのデータベースをデフォルトとして永続的に接続し($this->db)、2つ目のデータベースを接続したい時には、設定を読み込み接続する方法だと思います。
今回の記事では、その方法について紹介します。
Contents
設定ファイルの設定方法とデータベースへの接続方法
2つのデータベースに接続するためには、application/config/database.phpを編集する必要があります。
このapplication/config/database.phpファイルに2つのデータベースへの接続情報を記述します。
application/config/database.phpのデフォルトのデータベースの設定
まず、デフォルトのデータベースの接続情報を記述します。下記にMySQLを使用する際の例を示します。
$db['default']['hostname'] = "localhost"; $db['default']['username'] = "root"; $db['default']['password'] = ""; $db['default']['database'] = "database_name"; $db['default']['dbdriver'] = "mysql"; $db['default']['dbprefix'] = ""; $db['default']['pconnect'] = TRUE; $db['default']['db_debug'] = FALSE; $db['default']['cache_on'] = FALSE; $db['default']['cachedir'] = ""; $db['default']['char_set'] = "utf8"; $db['default']['dbcollat'] = "utf8_general_ci"; $db['default']['swap_pre'] = ""; $db['default']['autoinit'] = TRUE; $db['default']['stricton'] = FALSE;
ここで気づくと思いますが、デフォルトのデータベースは、$db[‘default’]の配列に接続情報を入れ、下記のように設定しています。
$db['default']['pconnect'] = TRUE;
このpconnectという設定項目は、持続的な接続をオープンするか設定します。この項目をTRUEとすることでデフォルトのデータベースとして設定されます。
次に2つ目のデータベースの接続情報を作成します。
2つめのデータベースの接続情報を設定する
2つめのデータベースの接続情報は下記のように記述します。記述するファイルは、デフォルトのデータベースの接続情報と同様application/config/database.phpです。
今回は、otherdbという配列へデータベースの接続情報を設定します。
$db['otherdb']['hostname'] = "localhost"; $db['otherdb']['username'] = "root"; $db['otherdb']['password'] = ""; $db['otherdb']['database'] = "other_database_name"; $db['otherdb']['dbdriver'] = "mysql"; $db['otherdb']['dbprefix'] = ""; $db['otherdb']['pconnect'] = FALSE; $db['otherdb']['db_debug'] = FALSE; $db['otherdb']['cache_on'] = FALSE; $db['otherdb']['cachedir'] = ""; $db['otherdb']['char_set'] = "utf8"; $db['otherdb']['dbcollat'] = "utf8_general_ci"; $db['otherdb']['swap_pre'] = ""; $db['otherdb']['autoinit'] = TRUE; $db['otherdb']['stricton'] = FALSE;
ここで気づくと思いますが、pconnectは下記のように設定されています。
$db['otherdb']['pconnect'] = FALSE;
としています。これにより、1つめのデータベースには、永続的に接続されますが、2つめのデータベースは、接続する際には、$this->load->databaseしないとデータベースへ接続されません。
データベースへの接続方法
1つめのデータベースと2つめのデータベースへ接続する方法は、簡単です。下記に例を示します。
// デフォルトのデータベースのusersテーブルからSELECTする $users = $this->db->get('users'); //2つめのデータベースへ接続する 下記の例では、セカンダリのデータベースへ接続し、 //stuffテーブルをSELECTし、セカンダリのデータベースのusersテーブルへinsertをしています。 $otherdb = $this->load->database('otherdb', TRUE); $stuff = $otherdb->get('stuff'); $otherdb->insert_batch('users', $users->result_array()); //通常のようにデフォルトのデータベースへも接続しつづけます。 例えば、上の$stuff = $otherdb->get('stuff'); //で取得した別のデータベースの情報をinsertすることもできます。 $this->db->insert_batch('stuff', $stuff->result_array());
以上が、CodeIgniterで複数のデータベースへ接続する方法です。この方法を使用すれば、2つ以上のデータベースへ接続することも可能です。
意外と複数のデータベースに接続しないといけない機会というのはあったりするので、参考にして見てください。