CodeIgniter4 數(shù)據(jù)庫(kù)配置

2020-08-17 16:07 更新

CodeIgniter 有一個(gè)用來(lái)保存數(shù)據(jù)庫(kù)配置的文件(用戶名,密碼,數(shù)據(jù)庫(kù)名等),這個(gè)配置文件位于 application/Config/Database.php。你也可以在 .env 文件里配置數(shù)據(jù)庫(kù)連接參數(shù)。下面來(lái)看看詳細(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';

注解

如果你沒(méi)有指定 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ù)由于某些原因無(wú)法連接時(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 是否是用加密連接
‘sqlsrv’ 和 ‘pdo/sqlsrv’ 驅(qū)動(dòng)接受 TRUE/FALSE
‘MySQLi’ 和 ‘pdo/mysql’ 驅(qū)動(dòng)接受一個(gè)數(shù)組,選項(xiàng)如下:
‘ssl_key’    - 私鑰文件存放路徑
‘ssl_cert’   - 公鑰證書文件存放路徑
‘ssl_ca’     - CA證書授權(quán)文件路徑
‘ssl_capath’ - PEM格式的受信任CA證書存放目錄
‘ssl_cipher’ -  允許 使用的加密算法列表,多項(xiàng)用 (‘:’) 分割
‘ssl_verify’ - TRUE/FALSE; 是否驗(yàn)證服務(wù)器的證書 (僅限 MySQLi)
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í),你無(wú)需指定用戶名和密碼,數(shù)據(jù)庫(kù)名稱是你的數(shù)據(jù)庫(kù)文件路徑。以上內(nèi)容假設(shè)你使用的是 MySQL 數(shù)據(jù)庫(kù)。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)