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

2020-08-17 16:07 更新

CodeIgniter 有一個用來保存數(shù)據(jù)庫配置的文件(用戶名,密碼,數(shù)據(jù)庫名等),這個配置文件位于 application/Config/Database.php。你也可以在 .env 文件里配置數(shù)據(jù)庫連接參數(shù)。下面來看看詳細配置信息。

配置信息是一個數(shù)組,存儲在類的屬性里面,原型如下:

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ù)據(jù)庫驅(qū)動(例如:PDO,PostgreSQL,Oracle,ODBC)可能需要提供完整的 DNS 信息。在這種情況下,你需要使用 DNS 配置參數(shù),就像使用該驅(qū)動的原生 PHP 擴展一樣,例如:

// PDO
$default['DSN'] = 'pgsql:host=localhost;port=5432;dbname=database_name';


// Oracle
$default['DSN'] = '//localhost/XE';

注解

如果你沒有指定 DNS 驅(qū)動需要的參數(shù)信息,CodeIgniter 將使用你提供的其它配置信息自動構(gòu)造它。

如果你提供了一個 DNS 參數(shù),但是缺少了某些配置(例如:數(shù)據(jù)庫的字符集),若該配置存在在其它的配置項中,CodeIgniter 將自動在 DNS 上附加上該配置。

當主數(shù)據(jù)庫由于某些原因無法連接時,你可以配置多個災備數(shù)據(jù)庫。例如可以像下面這樣為一個連接配置災備數(shù)據(jù)庫:

$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
                ]
        ];

你可以指定任意多個災備數(shù)據(jù)庫配置。

你可以選擇性地存儲多組連接信息。例如,在一個安裝實例里面運行多個環(huán)境(開發(fā)、生產(chǎn)、測試等),你可以為每個環(huán)境配置連接組,然后在組之間進行切換。舉個例子:若要設(shè)置一個 ‘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’ 是任意的。它可以是你想要的任意名稱。默認情況下,主連接使用 ‘default’ 這個名稱,但你也可以起一個與你項目更加相關(guān)的名稱。

你可以修改配置文件里面類的構(gòu)造函數(shù),讓它自動檢測運行環(huán)境并將 ‘defaultGroup’ 更新為正確的值:

class Database
{
    public $development = [...];
    public $test        = [...];
    public $production  = [...];


        public function __construct()
        {
                $this->defaultGroup = ENVIRONMENT;
        }
}

配置 .env 文件

你也可以將當前服務(wù)器的數(shù)據(jù)庫配置保存到 .env 文件 中。你只需要在默認配置組中輸入你想要變更的值。該值在 default 組中的格式為:

database.default.username = 'root';
database.default.password = '';
database.default.database = 'ci4';

其它信息

參數(shù)解釋:

配置名 描述
dsn DNS 連接字符串 (該字符串包含了連接數(shù)據(jù)庫的全部配置信息)
hostname 數(shù)據(jù)庫的主機名,通常為本機的 ‘localhost’
username 連接數(shù)據(jù)庫的用戶名
password 連接數(shù)據(jù)庫的密碼
database 需要連接的數(shù)據(jù)庫名
DBDriver 數(shù)據(jù)庫類型,如:MySQLi、Postgre等。大小寫必須與驅(qū)動名匹配
DBPrefix 當使用 查詢構(gòu)造器 查詢時,可以選擇性的為表加個前綴,它允許多個 CodeIgniter 程序共用一個數(shù)據(jù)庫
pConnect TRUE/FALSE (boolean) - 是否使用持續(xù)連接
DBDebug TRUE/FALSE (boolean) - 是否顯示數(shù)據(jù)庫錯誤信息
cacheOn TRUE/FALSE (boolean) - 是否開啟數(shù)據(jù)庫查詢緩存
cacheDir 數(shù)據(jù)庫查詢緩存目錄,服務(wù)器絕對路徑
charset 與數(shù)據(jù)庫通信時所使用的字符集
DBCollat 與數(shù)據(jù)庫通信時所使用的字符集規(guī)則(只用于 ‘MySQLi’ 數(shù)據(jù)庫驅(qū)動)
swapPre 替換默認的 dbprefix 表前綴,該項設(shè)置對于分布式應(yīng)用是非常有用的, 你可以在查詢中使用由最終用戶定制的表前綴。
schema 默認數(shù)據(jù)庫模式為 ‘public’,用于 PostgreSQL 和 ODBC 驅(qū)動
encrypt 是否是用加密連接
‘sqlsrv’ 和 ‘pdo/sqlsrv’ 驅(qū)動接受 TRUE/FALSE
‘MySQLi’ 和 ‘pdo/mysql’ 驅(qū)動接受一個數(shù)組,選項如下:
‘ssl_key’    - 私鑰文件存放路徑
‘ssl_cert’   - 公鑰證書文件存放路徑
‘ssl_ca’     - CA證書授權(quán)文件路徑
‘ssl_capath’ - PEM格式的受信任CA證書存放目錄
‘ssl_cipher’ -  允許 使用的加密算法列表,多項用 (‘:’) 分割
‘ssl_verify’ - TRUE/FALSE; 是否驗證服務(wù)器的證書 (僅限 MySQLi)
compress 是否使用客戶端壓縮協(xié)議(只用于 MySQL)
strictOn TRUE/FALSE (boolean) - 是否強制使用 “Strict Mode” 連接。在程序開發(fā)時,使用 strict SQL 是一個好習慣
port 數(shù)據(jù)庫端口號。 要使用這個值,你應(yīng)該添加以下一行代碼到數(shù)據(jù)庫配置組中 $default['port'] = 5432; 

注解

根據(jù)你使用的數(shù)據(jù)庫平臺(MySQL、PostgreSQL等)不是所有參數(shù)都要配置。例如,當你使用 SQLite 時,你無需指定用戶名和密碼,數(shù)據(jù)庫名稱是你的數(shù)據(jù)庫文件路徑。以上內(nèi)容假設(shè)你使用的是 MySQL 數(shù)據(jù)庫。

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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號