數(shù)據(jù)庫(kù)配置?
CodeIgniter 有一個(gè)用來保存數(shù)據(jù)庫(kù)配置的文件(用戶名,密碼,數(shù)據(jù)庫(kù)名等),這個(gè)配置文件位于 application/Config/Database.php。你也可以在 .env 文件里配置數(shù)據(jù)庫(kù)連接參數(shù)。下面來看看詳細(xì)配置信息。
配置信息是一個(gè)數(shù)組,存儲(chǔ)在類的屬性里面,原型如下:
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' => array(),
];
類的屬性名稱就是連接名稱,并且在連接時(shí)可以作為指定配置組名稱使用。
有些數(shù)據(jù)庫(kù)驅(qū)動(dòng)(例如:PDO,PostgreSQL,Oracle,ODBC)可能需要提供完整的 DNS 信息。在這種情況下,你需要使用 DNS 配置參數(shù),就像使用該驅(qū)動(dòng)的原生 PHP 擴(kuò)展一樣,例如:
// PDO
$default['DSN'] = 'pgsql:host=localhost;port=5432;dbname=database_name';
// Oracle
$default['DSN'] = '//localhost/XE';
注解
如果你沒有指定 DNS 驅(qū)動(dòng)需要的參數(shù)信息,CodeIgniter 將使用你提供的其它配置信息自動(dòng)構(gòu)造它。
注解
如果你提供了一個(gè) DNS 參數(shù),但是缺少了某些配置(例如:數(shù)據(jù)庫(kù)的字符集),若該配置存在在其它的配置項(xiàng)中,CodeIgniter 將自動(dòng)在 DNS 上附加上該配置。
當(dāng)主數(shù)據(jù)庫(kù)由于某些原因無法連接時(shí),你可以配置多個(gè)災(zāi)備數(shù)據(jù)庫(kù)。例如可以像下面這樣為一個(gè)連接配置災(zāi)備數(shù)據(jù)庫(kù):
$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
]
];
你可以指定任意多個(gè)災(zāi)備數(shù)據(jù)庫(kù)配置。
你可以選擇性地存儲(chǔ)多組連接信息。例如,在一個(gè)安裝實(shí)例里面運(yùn)行多個(gè)環(huán)境(開發(fā)、生產(chǎn)、測(cè)試等),你可以為每個(gè)環(huán)境配置連接組,然后在組之間進(jìn)行切換。舉個(gè)例子:若要設(shè)置一個(gè) ‘test’ 環(huán)境,你可以這么做:
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' => array()
);
然后,修改該配置文件中的屬性值,告知系統(tǒng)使用該組信息:
$defaultGroup = 'test';
注解
組名稱 ‘test’ 是任意的。它可以是你想要的任意名稱。默認(rèn)情況下,主連接使用 ‘default’ 這個(gè)名稱,但你也可以起一個(gè)與你項(xiàng)目更加相關(guān)的名稱。
你可以修改配置文件里面類的構(gòu)造函數(shù),讓它自動(dòng)檢測(cè)運(yùn)行環(huán)境并將 ‘defaultGroup’ 更新為正確的值:
class Database
{
public $development = [...];
public $test = [...];
public $production = [...];
public function __construct()
{
$this->defaultGroup = ENVIRONMENT;
}
}
配置 .env 文件?
你也可以將當(dāng)前服務(wù)器的數(shù)據(jù)庫(kù)配置保存到 .env
文件 中。你只需要在默認(rèn)配置組中輸入你想要變更的值。該值在 default
組中的格式為:
database.default.username = 'root';
database.default.password = '';
database.default.database = 'ci4';
其它信息
參數(shù)解釋:?
配置名 | 描述 |
---|---|
dsn | DNS 連接字符串 (該字符串包含了連接數(shù)據(jù)庫(kù)的全部配置信息) |
hostname | 數(shù)據(jù)庫(kù)的主機(jī)名,通常為本機(jī)的 ‘localhost’ |
username | 連接數(shù)據(jù)庫(kù)的用戶名 |
password | 連接數(shù)據(jù)庫(kù)的密碼 |
database | 需要連接的數(shù)據(jù)庫(kù)名 |
DBDriver | 數(shù)據(jù)庫(kù)類型,如:MySQLi、Postgre等。大小寫必須與驅(qū)動(dòng)名匹配 |
DBPrefix | 當(dāng)使用 查詢構(gòu)造器 查詢時(shí),可以選擇性的為表加個(gè)前綴,它允許多個(gè) CodeIgniter 程序共用一個(gè)數(shù)據(jù)庫(kù) |
pConnect | TRUE/FALSE (boolean) - 是否使用持續(xù)連接 |
DBDebug | TRUE/FALSE (boolean) - 是否顯示數(shù)據(jù)庫(kù)錯(cuò)誤信息 |
cacheOn | TRUE/FALSE (boolean) - 是否開啟數(shù)據(jù)庫(kù)查詢緩存 |
cacheDir | 數(shù)據(jù)庫(kù)查詢緩存目錄,服務(wù)器絕對(duì)路徑 |
charset | 與數(shù)據(jù)庫(kù)通信時(shí)所使用的字符集 |
DBCollat | 與數(shù)據(jù)庫(kù)通信時(shí)所使用的字符集規(guī)則 注解 只用于 ‘MySQLi’ 數(shù)據(jù)庫(kù)驅(qū)動(dòng) |
swapPre | 替換默認(rèn)的 dbprefix 表前綴,該項(xiàng)設(shè)置對(duì)于分布式應(yīng)用是非常有用的, 你可以在查詢中使用由最終用戶定制的表前綴。 |
schema | 默認(rèn)數(shù)據(jù)庫(kù)模式為 ‘public’,用于 PostgreSQL 和 ODBC 驅(qū)動(dòng) |
encrypt | 是否是用加密連接
|
compress | 是否使用客戶端壓縮協(xié)議(只用于 MySQL) |
strictOn | TRUE/FALSE (boolean) - 是否強(qiáng)制使用 “Strict Mode” 連接。在程序開發(fā)時(shí),使用 strict SQL 是一個(gè)好習(xí)慣 |
port | 數(shù)據(jù)庫(kù)端口號(hào)。 要使用這個(gè)值,你應(yīng)該添加以下一行代碼到數(shù)據(jù)庫(kù)配置組中 $default['port'] = 5432;
|
注解
根據(jù)你使用的數(shù)據(jù)庫(kù)平臺(tái)(MySQL、PostgreSQL等)不是所有參數(shù)都要配置。例如,當(dāng)你使用 SQLite 時(shí),你無需指定用戶名和密碼,數(shù)據(jù)庫(kù)名稱是你的數(shù)據(jù)庫(kù)文件路徑。以上內(nèi)容假設(shè)你使用的是 MySQL 數(shù)據(jù)庫(kù)。