データベースへの接続

データベース接続を必要とするあらゆる関数内で、次のコードを書き加えることで接続することができます。もしくはクラスのコンストラクタ内に書くことで、クラス内のどこでも使えるようにできます。

$db = \Config\Database::connect();

上記の関数が第1引数を持たない場合、データベース設定ファイルに記載されたデフォルトグループに接続します。ほとんどの人にとって、これは好ましい方法です。

上記の行を単にラップしただけの便利関数があり、簡便さを提供します:

$db = db_connect();

使用可否のパラメータ

  1. データベースグループ名の文字列は、設定クラスのプロパティ名と一致しなければなりません。デフォルト値は $config->defaultGroup です。
  2. TRUE/FALSE (boolean). shared connection を返すかどうか(下記の複数データベースへの接続を参照)。

データベースへの手動接続

この機能の第1引数は オプションで 設定ファイルに書いた特定のデータベースグループを指定することができます。例:

設定ファイルから特定のグループを選択するには次のようにします:

$db = \Config\Database::connect('group_name');

group_name のところは設定ファイルの接続グループ名です。 file.

同一データベースへの複数接続

デフォルトでは、 connect() メソッドはいつも同一のデータベース接続インスタンスを返します。もし同一データベースに別の接続を張ることが必要なら、第2引数に false をつけてください。

$db = ConfigDatabase::connect('group_name', false);

複数データベースへの接続

もし同時に2つ以上のデータベースに接続する必要があれば、次のようにしてください:

$db1 = \Config\Database::connect('group_one');
$db  = \Config\Database::connect('group_two');

Note: "group_one" と "group_two" の単語は接続したいグループ名に変更してください。

注釈

同一の接続で異なるデータベースを使いたい場合は、データベース設定を分けて作る必要はありません。データベースを切り替えたい場合、必要なタイミングで次のようにしてください:

$db->setDatabase($database2_name);

独自設定での接続

グループ名の代わりにデータベース設定の配列を渡すことで独自設定を使用した接続を取得できます。配列は設定ファイルのグループと同じフォーマットで定義したものを渡さなければなりません。:

$custom = [
            'DSN'      => '',
            'hostname' => 'localhost',
            'username' => '',
            'password' => '',
            'database' => '',
            'DBDriver' => 'MySQLi',
            'DBPrefix' => '',
            'pConnect' => false,
            'DBDebug'  => (ENVIRONMENT !== 'production'),
            'cacheOn'  => false,
            'cacheDir' => '',
            'charset'  => 'utf8',
            'DBCollat' => 'utf8_general_ci',
            'swapPre'  => '',
            'encrypt'  => false,
            'compress' => false,
            'strictOn' => false,
            'failover' => [],
            'port'     => 3306,
    ];
$db = \Config\Database::connect($custom);

再接続 / 接続を生きたままにする

もしPHPの重い処理(画像処理など)のため、データベースサーバのアイドリングタイムアウトになる場合、後続クエリの前に reconnect() メソッドを使って ping を打つことを考慮するべきです。緩やかな処理で接続を生かしたままにするか、または再接続できます。

重要

もし MySQLi データベースドライバを使用しているなら、 reconnect() メソッドはサーバに ping は行わず、接続を切断してから再度接続します。

$db->reconnect();

接続の手動切断

CodeIgniter はデータベース接続の切断をかしこく処理してくれますが、明示的に接続を閉じることもできます。

$db->close();