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

更新日: 2016年2月25日

実行時間: 0.0098

データベース設定

 この項では、データベースにアクセスる為の設定方法を解説しています。

 CodeIgniterのデータベース設定では、 一つの設定ファイルで複数のデータベースに接続するための設定が可能です。
 また、「開発(development)」「テスト(testing)」「本番(production)」といった 環境毎に設定ファイル
を作成することもできるようになっています。

データベース設定ファイル

 データベース設定ファイルは、「application/config/」ディレクトリ、もしくは、下記で示す環境毎の
ディレクトリにファイル名「database.php」として作成します。

    • 開発用「application/config/development/」
    • テスト用「application/config/testing/」
    • 本番用「application/config/production/」

データベース識別

 データベースの設定情報は「$db」変数に二次元連想配列として格納されます。

 一次元目の添え字(インデックスキー)には複数のデータベースを識別するための文字列を指定し、
二次元目の添え字に各設定項目名を指定していきます。

 CodeIgniterをインストールした直後には、「default」というデータベース識別子が用意されています。

    $db['default'] = array();
    $db['master'] = array();
    $db['slave'] = array();

$active_group

 データベースに接続(インスタンス生成)する際には、どのデータベースに接続するかを指定する必要がありまが、 指定されなかった場合に、設定情報を読込むためのデフォルトのデータベースを識別する
識別子を設定します。

 CodeIgniterのインストール時には、「default」が設定されています。

    $active_group = 'default';

ActiveRecord設定

$active_record

 Active Record の機能を利用するか設定します。FALSEを設定すると Active Recordの機能は利用できなくなります。

    $active_record = TRUE;

設定項目

 利用するデータベースそれぞれに下記の設定項目を設定します。

hostname

データベースサーバのIPアドレス、または、ホスト名を指定します。
また、TCPポート番号を「:」に続けて指定することも可能です。

    $db['default']['hostname'] = 'localhost';
    $db['master']['hostname'] = '192.168.0.200:3306';

username

 データベースにアクセスするデータベースユーザ名を指定します。

    $db['default']['username'] = 'user-name';

password

 データベースにアクセスするデータベースユーザのパスワードを指定します。

    $db['default']['username'] = 'user-pass';

database

アクセスするデータベースのデータベース名を指定します。

    $db['default']['database'] = 'my_db';

dbdriver

 利用するデータベースドライバーを指定します。
CodeIgniterインストール時は下記のドライバーが利用できます。

DBドライバー 概要
mysqlPHPのMySQLモジュールを利用しています
mysqliPHPのMySQL改良版拡張モジュールを利用しています
postgrePHPのPostgreSQLモジュールを利用しています
odbcPHPのODBCモジュールを利用しています
mssqlPHPのMssqlモジュールを利用しています
sqlitePHPのSQLiteモジュールを利用しています
oci8PHPのOracle OCI8モジュールを利用しています
    $db['default']['dbdriver'] = 'mysql';

dbprefix 一番上に戻る

 テーブル名のプレフィックス(接頭辞)を指定します。

 テーブル名にプレフィックス(接頭辞)を付けることで、同じソースコードを流用することが可能になります。
例えば、一つのデータベースに同じテーブル構造を持つテーブル「aaa_user_table」「bbb_user_table」を作成し、 CodeIgniterで構築した二つの同じWebアプリを、設定ファイルのこの設定を変更するだけで利用できます。

  • sample_database
    • aaa_user_table
    | id     | int(11)     |
    | name   | varchar(32) |
    | email  | varchar(64) |
    
    • bbb_user_table
    | id     | int(11)     |
    | name   | varchar(32) |
    | email  | varchar(64) |
    

    • 一つ目のWebアプリ
    $db['default']['database'] = 'sample_database';
    $db['default']['dbprefix'] = 'aaa_';
    • 二つ目のWebアプリ
    $db['default']['database'] = 'sample_database';
    $db['default']['dbprefix'] = 'bbb_';
    • 同じソースコード
    $this->load->database();
    $query = $this->db->get('user_table');

pconnect 一番上に戻る

 持続的な接続をオープンするか設定します。
 詳しくはコチラを参照してください。

    $db['default']['pconect'] = TRUE;
注:
CodeIgniter 2.1.2以下では、`mysqli`ドライバーを利用すると「pconncet」の設定が有効にならず、 持続的な接続が取得されない不具合があります。
`mysqli`ドライバー利用時には「hosntame」の設定でサーバのアドレスの前に「p:」を付けることで、 持続的な接続が得られます。
    $db['default']['hostname'] = 'p:localhost';
    $db['default']['dbdriver'] = 'mysqli';

db_debug 一番上に戻る

TRUEを指定すると、データベースエラーが発生した際に処理を停止させ、ブラウザに エラーメッセージを表示します。

 本番環境では、不要な情報が漏洩してしまいますので「FALSE」を指定することをお勧めします。

    • config/development/database.php
    $db['default']['db_debug'] = TRUE;
    • config/production/database.php
    $db['default']['db_debug'] = FALSE;

cache_on
cachedir 一番上に戻る

 読込みクエリの結果をキャッシュしたい場合は、「cache_on」にTRUEを指定し、
「cachedir」にキャッシュファイルを保存するディレクトリパスを指定します。
 (書込みクエリはキャッシュされることはありません。)

 「cachedir」には、絶対パスかドキュメントルートからの相対パスを指定します。

 「cache_on」にTRUEを指定しても、「cachedir」を設定しなかった場合は、 キャッシュは有効になりません。

    $db['default']['cache_on'] = TRUE;
    $db['default']['cachedir'] = APPPATH . 'cache/db';

char_set 一番上に戻る

データベースと接続するデフォルトの文字コードを指定します。

    $db['default']['char_set'] = 'utf8';

dbcollat 一番上に戻る

データベースと接続するデフォルトの照合順序を指定します。

    $db['default']['dbcollat'] = 'utf8_general_ci';

swap_pre 一番上に戻る

 SQLクエリに含まれる「dbprefix」で設定されたテーブル名の接頭辞を「swap_pre」で設定した接頭辞に置換して クエリを送信します。

    $db['default']['swap_pre'] = 'my_';

autoinit 一番上に戻る

「$this->load->databae()」メソッドにより、データベースインスタンスがロードされるタイミングで データベースに接続する場合は、「TRUE」を指定します。

 「FALSE」を指定した場合は、最初にSQLクエリを発行する直前にデータベースに接続します。

    $db['default']['autoinit'] = TRUE;

stricton 一番上に戻る

 「TRUE」を指定すると、データベース接続直後に下記のSQLを発行します。

    SET SESSION sql_mode="STRICT_ALL_TABLES;

 これにより、データをセットする際の自動型変換などが行われず、誤った型や、「NOT NULL」のカラムに NULLデータがセットされると、エラーとなります。

    $db['default']['stricton'] = TRUE;

デフォルト値

 データベース情報項目を指定しなかった際に、デフォルトとして利用される情報です。

設定項目 デフォルト値
dbdriver mysql
dbprefix ''
pconnect FALSE
db_debug FALSE
cache_on FALSE
cachedir ''
char_set utf8
dbcollat utf8_general_ci
swap_pre ''
autoinit TRUE
stricton FALSE