データベースへの接続

データベースへの接続

デフォルトグループへの接続

データベースに接続するには、必要な任意の関数の、またはクラスコンストラクタ内に次のコード行を追加して、そのクラスでデータベースをグローバルに使用できるようにします。

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

上記の関数の最初のパラメータに情報が**含まれていない**場合、データベース設定ファイルで指定されたデフォルトグループに接続します。ほとんどの人にとって、これは推奨される使用方法です。

便宜上、上記の行のラッパーである簡便なメソッドが用意されています。

$db = db_connect();

利用可能なパラメータ

\Config\Database::connect($group = null, bool $getShared = true): BaseConnection

  1. $group: データベースグループ名。設定クラスのプロパティ名と一致する必要がある文字列です。デフォルト値は Config\Database::$defaultGroup です。

  2. $getShared: true/false (ブール値)。共有接続を返すかどうか (以下の複数のデータベースへの接続を参照)。

特定のグループへの接続

この関数の最初のパラメータは、設定ファイルから特定のデータベースグループを指定するために**オプションで**使用できます。例

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

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

group_name は、設定ファイルからの接続グループの名前です。

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

デフォルトでは、connect() メソッドは、毎回データベース接続の同じインスタンスを返します。同じデータベースへの個別の接続が必要な場合は、2 番目のパラメータとして false を送信します。

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

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

複数のデータベースに同時に接続する必要がある場合は、次のようにします。

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

注:group_onegroup_two という単語を、接続先の特定のグループ名に変更してください。

注記

同じ接続で異なるデータベースを使用する必要があるだけなら、個別のデータベース設定を作成する必要はありません。必要に応じて、次のように異なるデータベースに切り替えることができます:$db->setDatabase($database2_name);

カスタム設定での接続

グループ名の代わりにデータベース設定の配列を渡して、カスタム設定を使用する接続を取得できます。渡される配列は、設定ファイルでグループが定義されているのと同じ形式である必要があります。

$custom = [
    'DSN'      => '',
    'hostname' => 'localhost',
    'username' => '',
    'password' => '',
    'database' => '',
    'DBDriver' => 'MySQLi',
    'DBPrefix' => '',
    'pConnect' => false,
    'DBDebug'  => true,
    '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();