データベース接続
CodeIgniterのデータベースオブジェクトを利用すれば、開発者がデータベースの接続や切断処理を コーディングする必要はありません。
データベースへの接続は、database.phpの「autoinit」設定によって
違いますが、データベース
オブジェクト生成時、または、最初のSQLクエリ発行時に設定ファイルの情報を基に行われます。
データベースオブジェクト生成
データベース操作を行うには、まず、データベースオブジェクトを生成しなければなりません。
データベースオブジェクトは、「CI_Loader」コアクラスの 「database()」メソッドで生成します。
設定ファイル情報を基に生成
- application/config/database.php
$db['default']['hostname'] = 'master.your.site';
: //省略
$db['slave']['hostname'] = 'slave.your.site';
: //省略
引数に何も指定せずに実行すると、database.php設定ファイルの
「$active_group」で設定した
デフォルトデータベース識別子のデータベース情報を基にオブジェクトが生成されます。
生成されたデータベースオブジェクトには、CodeIgniterインスタンスの「db」プロパティにセットされます。
$this->db->query('SELECT count(*) FROM hoge_tbl');
第一引数にデータベース識別子を指定することで、database.php設定ファイルに設定された特定の データベース情報を基にオブジェクトを生成することができます。
$this->db->query('SELECT count(*) FROM hoge_tbl');
設定情報を指定して生成
データベースオブジェクトを生成する際に、設定ファイルの情報ではなく、特定の設定情報を指定しすることもできます。
手動で設定情報を指定するには、設定項目を連想配列で第一引数に指定します。
設定項目は、「データベース設定」の項を参照してください。
一部、設定項目を指定しなかった場合はデフォルトの値が適用されます。
$config = array( 'hostname' => 'localhost', 'username' => 'user_name', 'password' => 'pass_word', 'database' => 'sample_db', 'stricton' => TRUE, ); $this->load->database($config); $this->db->query('SELECT count(*) FROM hoge_tbl');
複数のオブジェクトを生成
複数のデータベースに接続する必要がある際などは、複数のデータベースオブジェクトが必要になってきます。
第二引数に「TRUE」を指定することで、「database()」メソッドは、 データベースオブジェクトを
CodeIgniterインスタンスの「db」プロパティにセットせず、直接返します。
これを利用して、複数のデータベースオブジェクトを生成して、それぞれのオブジェクトから個別に
データベースにアクセスすることができます。
$master_db = $this->load->database('default', TRUE); $slave_db = $this->load->database('slave', TRUE); $master_db->query('SELECT count(*) FROM hoge_tbl'); $slave_db->query('SELECT count(*) FROM foo_tbl');
ActiveRecord設定の上書き
設定情報の「$active_record」は、全てのデータベース識別子に適用されてしまうため、 複数のデータベースオブジェクトを生成する際、それぞれ異なる「ActiveRecord」利用設定をする場合に 不都合となります。
そこで、第三引数に「TRUE」、または、「FALSE」を 指定することで、個別に「ActiveRecord」利用設定をすることができます。
// ActiveRecordを利用します。 $this->load->database('default', FALSE, TRUE); // ActiveRecordを利用しません。 $this->load->database('slave', FALSE, FALSE);
// ActiveRecordを利用します。 $master_db = $this->load->database('default', TRUE, TRUE); // ActiveRecordを利用しません。 $slave_db = $this->load->database('slave', TRUE, FALSE);
データベース接続確認
データベースに接続されているか確認するには、データベースオブジェクトの「conn_id」プロパティの値を確認します。
「conn_id」プロパティの値が「FALSE」の場合は、接続されていません。 値が「FALSE」以外の場合は接続されています。
利用するデータベースドライバーによっては、値が「NULL」の場合がありますので、 if 文でチェックする場合は「===」(型変換なし等号演算子)で比較する必要があります。
$this->load->database(); if ($this->db->conn_id === FALSE) { // データベースに接続されていません。 } else { // データベースに接続されています。 }
$slave_db = $this->load->database('slave', TRUE); if ($slave_db->conn_id === FALSE) { // データベースに接続されていません。 } else { // データベースに接続されています。 }