データベース設定
注記
現在サポートされているデータベースドライバーについては、サポートされているデータベースを参照してください。
設定ファイル
CodeIgniterには、データベース接続値(ユーザー名、パスワード、データベース名など)を保存できる設定ファイルがあります。設定ファイルは**app/Config/Database.php**にあります。データベース接続値は**.env**ファイルにも設定できます。詳細については以下を参照してください。
デフォルトデータベースの設定
設定は、このプロトタイプを持つ配列であるクラスプロパティに格納されます。
<?php
namespace Config;
use CodeIgniter\Database\Config;
class Database extends Config
{
// ...
public array $default = [
'DSN' => '',
'hostname' => 'localhost',
'username' => 'root',
'password' => '',
'database' => 'database_name',
'DBDriver' => 'MySQLi',
'DBPrefix' => '',
'pConnect' => false,
'DBDebug' => true,
'charset' => 'utf8',
'DBCollat' => 'utf8_general_ci',
'swapPre' => '',
'encrypt' => false,
'compress' => false,
'strictOn' => false,
'failover' => [],
'port' => 3306,
];
// ...
}
クラスプロパティの名前は接続名であり、接続時にグループ名を指定するために使用できます。
注記
SQLite3データベースのデフォルトの場所は**writable**フォルダです。場所を変更する場合は、新しいフォルダへのフルパスを設定する必要があります。
DSN
一部のデータベースドライバー(Postgre、OCI8など)は接続に完全なDSN文字列を必要とします。しかし、必要なドライバーにDSN文字列を指定しない場合、CodeIgniterは残りの設定を使用してDSN文字列を作成しようとします。
DSNを指定する場合は、ドライバーの基になるネイティブなPHP拡張機能を使用する場合と同様に、'DSN'
設定を使用する必要があります。
// OCI8
public array $default = [
'DSN' => '///XE',
// ...
];
普遍的な方法でのDSN
普遍的な方法(URLのような)でデータソース名を設定することもできます。その場合、DSNは次のプロトタイプである必要があります。
public array $default = [
'DSN' => 'DBDriver://username:password@hostname:port/database',
// ...
];
普遍的なバージョンのDSN文字列で接続する際にデフォルトの設定値をオーバーライドするには、設定変数をクエリ文字列として追加します。
// MySQLi
public array $default = [
'DSN' => 'MySQLi://username:password@hostname:3306/database?charset=utf8&DBCollat=utf8_general_ci',
// ...
];
// Postgre
public array $default = [
'DSN' => 'Postgre://username:password@hostname:5432/database?charset=utf8&connect_timeout=5&sslmode=1',
// ...
];
注記
DSN文字列を提供し、有効な設定の一部(例:データベース文字セット)が欠落している場合、残りの設定フィールドにある場合は、CodeIgniterがそれらを追加します。
フェイルオーバー
何らかの理由でメイン接続が接続できない場合に備えて、フェイルオーバーを指定することもできます。これらのフェイルオーバーは、次のように接続のフェイルオーバーを設定することで指定できます。
<?php
namespace Config;
use CodeIgniter\Database\Config;
class Database extends Config
{
// ...
public array $default = [
// ...
'failover' => [
[
'hostname' => 'localhost1',
'username' => '',
'password' => '',
'database' => '',
'DBDriver' => 'MySQLi',
'DBPrefix' => '',
'pConnect' => true,
'DBDebug' => true,
'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,
'charset' => 'utf8',
'DBCollat' => 'utf8_general_ci',
'swapPre' => '',
'encrypt' => false,
'compress' => false,
'strictOn' => false,
],
],
// ...
];
// ...
}
必要な数のフェイルオーバーを指定できます。
複数のデータベースの設定
複数の接続値セットを保存することもできます。たとえば、単一のインストールで複数の環境(開発、本番、テストなど)を実行する場合、各環境に接続グループを設定し、必要に応じてグループを切り替えることができます。たとえば、「test」環境を設定するには、次のようにします。
<?php
namespace Config;
use CodeIgniter\Database\Config;
class Database extends Config
{
// ...
public array $test = [
'DSN' => '',
'hostname' => 'localhost',
'username' => 'root',
'password' => '',
'database' => 'database_name',
'DBDriver' => 'MySQLi',
'DBPrefix' => '',
'pConnect' => true,
'DBDebug' => true,
'charset' => 'utf8',
'DBCollat' => 'utf8_general_ci',
'swapPre' => '',
'compress' => false,
'encrypt' => false,
'strictOn' => false,
'failover' => [],
];
// ...
}
次に、システムにそのグループを使用するようにグローバルに指示するには、設定ファイルにあるこの変数を設定します。
<?php
namespace Config;
use CodeIgniter\Database\Config;
class Database extends Config
{
// ...
public string $defaultGroup = 'test';
// ...
}
注記
test
という名前は任意です。好きな名前を使用できます。デフォルトでは、プライマリ接続にdefault
という単語を使用していますが、これもプロジェクトに関連する名前に変更できます。
データベースの自動切り替え
クラスのコンストラクタ内に必要なロジックを追加することで、環境を検出してdefaultGroup
の値を正しい値に自動的に更新するように設定ファイルを修正できます。
<?php
namespace Config;
use CodeIgniter\Database\Config;
/**
* Database Configuration
*/
class Database extends Config
{
// ...
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';
ただし、環境変数を設定して新しいプロパティを追加したり、スカラー値を配列に変更したりすることはできません。詳細については、データの代替としての環境変数を参照してください。
したがって、MySQLでSSLを使用する場合は、ハックが必要です。たとえば、**.env**ファイルに配列値をJSON文字列として設定します。
database.default.encrypt = {"ssl_verify":true,"ssl_ca":"/var/www/html/BaltimoreCyberTrustRoot.crt.pem"}
そして、Configクラスのコンストラクタでデコードします。
<?php
namespace Config;
use CodeIgniter\Database\Config;
/**
* Database Configuration
*/
class Database extends Config
{
// ...
public function __construct()
{
// ...
$array = json_decode($this->default['encrypt'], true);
if (is_array($array)) {
$this->default['encrypt'] = $array;
}
}
}
値の説明:
名前 設定 |
説明 |
---|---|
DSN |
DSN接続文字列(オールインワンの設定シーケンス)。 |
hostname |
データベースサーバーのホスト名。多くの場合、「localhost」です。 |
username |
データベースに接続するために使用されるユーザー名。( |
password |
データベースに接続するために使用されるパスワード。( |
database |
接続するデータベースの名前。 注記 CodeIgniterは、データベース、テーブル、列名にドット( |
DBDriver |
データベースドライバー名。大文字と小文字がドライバー名と一致する必要があります。カスタムドライバーを使用するには、完全修飾クラス名を設定できます。サポートされているドライバー: |
DBPrefix |
クエリビルダークエリを実行するときにテーブル名に追加されるオプションのテーブルプレフィックス。これにより、複数のCodeIgniterインストールが1つのデータベースを共有できます。 |
pConnect |
true/false(ブール値)- 永続的な接続を使用するかどうか。 |
DBDebug |
true/false(ブール値)- データベースエラーが発生したときに例外をスローするかどうか。 |
charset |
データベースとの通信に使用される文字セット。 |
DBCollat |
データベースとの通信に使用される文字照合順序( |
swapPre |
|
schema |
データベーススキーマ、デフォルト値はドライバーによって異なります。( |
encrypt |
暗号化された接続を使用するかどうか。 |
compress |
クライアント圧縮を使用するかどうか( |
strictOn |
true/false(ブール値) - アプリケーション開発中に厳格なSQLを確保するために、「厳格モード」接続を強制するかどうか( |
port |
データベースポート番号 - デフォルトポートの場合空文字列 |
foreignKeys |
true/false(ブール値) - 外部キー制約を有効にするかどうか( 重要 SQLite3の外部キー制約はデフォルトで無効になっています。SQLiteのドキュメントを参照してください。外部キー制約を適用するには、この設定項目をtrueに設定します。 |
busyTimeout |
ミリ秒(int) - テーブルがロックされている場合、指定された時間だけスリープします( |
numberNative |
true/false(ブール値) - MYSQLI_OPT_INT_AND_FLOAT_NATIVEを有効にするかどうか( |
注記
使用しているデータベースドライバ(MySQLi
、Postgre
など)によって、必要な値は異なります。SQLite3
を使用する場合は、ユーザー名やパスワードを指定する必要がなく、データベース名はデータベースファイルへのパスになります。