CodeIgniterで複数のデータベースに接続してみた。

シェアする

CodeIgniterを使用していて複数のデータベースへ接続したい機会というのがあると思います。

今回は、CodeIgniterを使用し、複数のデータベースへ接続する方法を紹介します。
CodeIgniterを使用し複数のデータベースに接続するのにBESTな方法は、1つのデータベースをデフォルトとして永続的に接続し($this->db)、2つ目のデータベースを接続したい時には、設定を読み込み接続する方法だと思います。

今回の記事では、その方法について紹介します。

設定ファイルの設定方法とデータベースへの接続方法

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つ以上のデータベースへ接続することも可能です。
意外と複数のデータベースに接続しないといけない機会というのはあったりするので、参考にして見てください。

[参考]
Codeigniter – multiple database connections

シェアする

フォローする