データベース設定

CodeIgniter にはデータベース接続用の値を保持する設定ファイルがあります(ユーザ名、パスワード、データベース名、など)。The config file is located at app/Config/Database.php. データベース設定値は .env ファイルにも保存できます。詳しくは以下をご覧ください。

設定はつぎのひな型を持つ配列として、クラス属性で保持されます:

public $default = [
        'DSN'      => '',
        'hostname' => 'localhost',
        'username' => 'root',
        'password' => '',
        'database' => 'database_name',
        'DBDriver' => 'MySQLi',
        'DBPrefix' => '',
        'pConnect' => TRUE,
        'DBDebug'  => TRUE,
        'cacheOn'  => FALSE,
        'cacheDir' => '',
        'charset'  => 'utf8',
        'DBCollat' => 'utf8_general_ci',
        'swapPre'  => '',
        'encrypt'  => FALSE,
        'compress' => FALSE,
        'strictOn' => FALSE,
        'failover' => [],
];

クラス属性の名前は接続名であり、グループ名としても使われます。

いくつかのデータベースドライバ(PDO、PostgreSQL、Oracle、ODBCなど)は完全な DSN 文字列を要求します。その場合、素の PHP でそのドライバを使用するような形で 'DSN' 設定を使う必要があります:

// PDO
$default['DSN'] = 'pgsql:host=localhost;port=5432;dbname=database_name';

// Oracle
$default['DSN'] = '//localhost/XE';

注釈

もしドライバが DSN を要求するにもかかわらず設定しなかった場合、CodeIgniter はほかの設定値から DSN 文字列を作成します。

注釈

もし DSN 文字列があっても設定が欠けている場合(例:文字コード指定)、ほかの設定値に存在すればそれを付け加えます。

何らかの理由で接続が確立しない場合などに備え、フェイルオーバーの設定もできます。 フェイルオーバーの設定は次のように行います:

$default['failover'] = [
                [
                        'hostname' => 'localhost1',
                        'username' => '',
                        'password' => '',
                        'database' => '',
                        'DBDriver' => 'MySQLi',
                        'DBPrefix' => '',
                        'pConnect' => TRUE,
                        'DBDebug'  => TRUE,
                        'cacheOn'  => FALSE,
                        'cacheDir' => '',
                        'charset'  => 'utf8',
                        'DBCollat' => 'utf8_general_ci',
                        'swapPre'  => '',
                        'encrypt'  => FALSE,
                        'compress' => FALSE,
                        'strictOn' => FALSE
                ],
                [
                        'hostname' => 'localhost2',
                        'username' => '',
                        'password' => '',
                        'database' => '',
                        'DBDriver' => 'MySQLi',
                        'DBPrefix' => '',
                        'pConnect' => TRUE,
                        'DBDebug'  => TRUE,
                        'cacheOn'  => FALSE,
                        'cacheDir' => '',
                        'charset'  => 'utf8',
                        'DBCollat' => 'utf8_general_ci',
                        'swapPre'  => '',
                        'encrypt'  => FALSE,
                        'compress' => FALSE,
                        'strictOn' => FALSE
                ]
        ];

フェイルオーバーの設定は好きなだけ増やせます。

オプションとして、接続設定のセットは複数作れます。もし例えば、複数環境(開発環境、本番環境、テスト環境など)をひとつのインストール環境で動かすなら、それぞれの接続グループを設定し、必要に応じて切り替えることができます。例として、"test" 環境を設定するにはこうします:

public $test = [
        'DSN'      => '',
        'hostname' => 'localhost',
        'username' => 'root',
        'password' => '',
        'database' => 'database_name',
        'DBDriver' => 'MySQLi',
        'DBPrefix' => '',
        'pConnect' => TRUE,
        'DBDebug'  => TRUE,
        'cacheOn'  => FALSE,
        'cacheDir' => '',
        'charset'  => 'utf8',
        'DBCollat' => 'utf8_general_ci',
        'swapPre'  => '',
        'compress' => FALSE,
        'encrypt'  => FALSE,
        'strictOn' => FALSE,
        'failover' => []
);

そして、設定ファイルの変数に設定することで、システムに対してグローバルに通知します:

$defaultGroup = 'test';

注釈

The name 'test' is arbitrary. これは好きなように変えられます。By default we've used the word "default" for the primary connection, but it too can be renamed to something more relevant to your project.

設定ファイルは変更できるので、クラスのコンストラクタにロジックを追加すれば、実行環境を自動判定して defaultGroup 値を適切なものに更新することでができます:

class Database
{
    public $development = [...];
    public $test        = [...];
    public $production  = [...];

        public function __construct()
        {
                $this->defaultGroup = ENVIRONMENT;
        }
}

.env ファイルを使った設定

データベース設定は .env ファイルに入れることで実行サーバに合わせた設定値を保存しておくことができます。そのファイルにはデフォルトグループの設定値から変更するものだけを入力しておけば良いです。グループ名を default とすると、フォーマットは次のようになります:

database.default.username = 'root';
database.default.password = '';
database.default.database = 'ci4';

他と同様です。

設定値の解説

設定名 説明
dsn The DSN connect string (an all-in-one configuration sequence).
hostname データベースサーバのホスト名。多くの場合で 'localhost' が使われます。
username 接続するデータベースで使用するユーザ名。
password 接続するデータベースで使用するパスワード。
database 接続するデータベース名。
DBDriver データベースの種類。例: MySQLi、Postgre、など。大文字小文字はドライバ名に合わせなければなりません。
DBPrefix (オプション)テーブル名のプレフィックス。Query Builder のクエリが実行されるときにテーブル名に付与されます。これによりひとつのデータベースを共有して複数の CodeIgniter の設置を行えます。
pConnect TRUE/FALSE (boolean) - 持続的接続を使用するかどうか。
DBDebug TRUE/FALSE (boolean) - データベースエラーを表示するかどうか。
cacheOn TRUE/FALSE (boolean) - データベースクエリをキャッシュするかどうか。
cacheDir データベースクエリをキャッシュするディレクトリへの絶対パス。
charset データベースと通信する際に使用する文字コード。
DBCollat

データベースと通信する際に使用する character collation。

注釈

これは 'MySQLi' ドライバでのみ使用します。

swapPre DBPrefix と入れ替えるデフォルトテーブルプレフィックス。クエリを手作業で書いたものを配布する必要があり、その上エンドユーザがプレフィックスをカスタマイズしなければならないときに、この機能は便利です。
schema データベーススキーマ。デフォルトは 'public' です。PostgreSQL ドライバと ODBC ドライバで使用されます。
encrypt

暗号化接続を使用するかどうか。

  • 'sqlsrv' ドライバと 'pdo/sqlsrv' ドライバは TRUE/FALSE を受け取ります。
  • 'MySQLi' ドライバと 'pdo/mysql' ドライバは次のオプションの配列を受け取ります:
    • 'ssl_key' - Path to the private key file
    • 'ssl_cert' - Path to the public key certificate file
    • 'ssl_ca' - Path to the certificate authority file
    • 'ssl_capath' - Path to a directory containing trusted CA certificates in PEM format
    • 'ssl_cipher' - List of allowed ciphers to be used for the encryption, separated by colons (':')
    • 'ssl_verify' - TRUE/FALSE; Whether to verify the server certificate or not ('MySQLi' only)
compress クライアント圧縮を使うかどうか(MySQL のみ)。
strictOn TRUE/FALSE (boolean) - 接続に "Strict Mode" を強制するかどうか。アプリケーション開発中に SQL が厳格であること確実にするのに便利です。
port

データベースのポート番号。この値を使用するにはデータベース設定配列に追加する必要があります。

$default['port'] = 5432;

注釈

使用しているデータベースプラットフォーム(MySQL、PostgreSQL、など)により、すべての値が必要になるわけではありません。例えば、SQLite を使うならユーザ名とパスワードは不要で、データベース名はデータベースファイルのパスになります。The information above assumes you are using MySQL.