データベースへの接続
データベースへの接続
デフォルトグループへの接続
データベースに接続するには、必要な任意の関数の、またはクラスコンストラクタ内に次のコード行を追加して、そのクラスでデータベースをグローバルに使用できるようにします。
$db = \Config\Database::connect();
上記の関数の最初のパラメータに情報が**含まれていない**場合、データベース設定ファイルで指定されたデフォルトグループに接続します。ほとんどの人にとって、これは推奨される使用方法です。
便宜上、上記の行のラッパーである簡便なメソッドが用意されています。
$db = db_connect();
利用可能なパラメータ
\Config\Database::connect($group = null, bool $getShared = true): BaseConnection
$group
: データベースグループ名。設定クラスのプロパティ名と一致する必要がある文字列です。デフォルト値はConfig\Database::$defaultGroup
です。$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_one
と group_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();