このエントリーをはてなブックマークに追加

更新日: 2016年2月25日

実行時間: 0.0069

データベース接続

 CodeIgniterのデータベースオブジェクトを利用すれば、開発者がデータベースの接続や切断処理を コーディングする必要はありません。

 データベースへの接続は、database.phpの「autoinit」設定によって 違いますが、データベース
オブジェクト生成時、または、最初のSQLクエリ発行時に設定ファイルの情報を基に行われます。

データベースオブジェクト生成

 データベース操作を行うには、まず、データベースオブジェクトを生成しなければなりません。

 データベースオブジェクトは、「CI_Loader」コアクラスの 「database()」メソッドで生成します。

 設定ファイル情報を基に生成


    • application/config/database.php
    $active_group = 'default';

    $db['default']['hostname'] = 'master.your.site';
        : //省略
    $db['slave']['hostname'] = 'slave.your.site';
        : //省略

 引数に何も指定せずに実行すると、database.php設定ファイルの 「$active_group」で設定した
デフォルトデータベース識別子のデータベース情報を基にオブジェクトが生成されます。
 生成されたデータベースオブジェクトには、CodeIgniterインスタンスの「db」プロパティにセットされます。

    $this->load->database(); // defaultの情報を基に生成
    $this->db->query('SELECT count(*) FROM hoge_tbl');

 第一引数にデータベース識別子を指定することで、database.php設定ファイルに設定された特定の データベース情報を基にオブジェクトを生成することができます。

    $this->load->database('slave); // slaveの情報を基に生成
    $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
    {
        // データベースに接続されています。
    }