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

2018-07-21 15:41 更新

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

CodeIgniter 有一個配置文件用來保存數(shù)據(jù)庫連接值(用戶名、密碼、數(shù)據(jù)庫名等等), 這個配置文件位于 application/config/database.php 。 你也可以放置不同的 database.php 文件到特定的環(huán)境配置文件夾里 來設置 特定環(huán)境 的數(shù)據(jù)庫連接值。

配置存放在一個多維數(shù)組里,原型如下:

$db['default'] = array(
    'dsn'   => '',
    'hostname' => 'localhost',
    'username' => 'root',
    'password' => '',
    'database' => 'database_name',
    'dbdriver' => 'mysqli',
    'dbprefix' => '',
    'pconnect' => TRUE,
    'db_debug' => TRUE,
    'cache_on' => FALSE,
    'cachedir' => '',
    'char_set' => 'utf8',
    'dbcollat' => 'utf8_general_ci',
    'swap_pre' => '',
    'encrypt' => FALSE,
    'compress' => FALSE,
    'stricton' => FALSE,
    'failover' => array()
);

有些數(shù)據(jù)庫驅(qū)動(譬如:PDO,PostgreSQL,Oracle,ODBC)可能需要提供完整的 DSN 字符串。 在這種情況下,你需要使用 'dsn' 配置參數(shù),就好像使用該驅(qū)動的 PHP 原生擴展一樣。譬如:

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

// Oracle
$db['default']['dsn'] = '//localhost/XE';

注解

如果你沒有為需要 DSN 參數(shù)的驅(qū)動指定 DSN 字符串,CodeIgniter 將使用你提供的其他配置信息自動生成它。

注解

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

當主數(shù)據(jù)庫由于某些原因無法連接時,你還可以配置故障轉(zhuǎn)移(failover)。 可以像下面這樣為一個連接配置故障轉(zhuǎn)移:

$db['default']['failover'] = array(
        array(
            'hostname' => 'localhost1',
            'username' => '',
            'password' => '',
            'database' => '',
            'dbdriver' => 'mysqli',
            'dbprefix' => '',
            'pconnect' => TRUE,
            'db_debug' => TRUE,
            'cache_on' => FALSE,
            'cachedir' => '',
            'char_set' => 'utf8',
            'dbcollat' => 'utf8_general_ci',
            'swap_pre' => '',
            'encrypt' => FALSE,
            'compress' => FALSE,
            'stricton' => FALSE
        ),
        array(
            'hostname' => 'localhost2',
            'username' => '',
            'password' => '',
            'database' => '',
            'dbdriver' => 'mysqli',
            'dbprefix' => '',
            'pconnect' => TRUE,
            'db_debug' => TRUE,
            'cache_on' => FALSE,
            'cachedir' => '',
            'char_set' => 'utf8',
            'dbcollat' => 'utf8_general_ci',
            'swap_pre' => '',
            'encrypt' => FALSE,
            'compress' => FALSE,
            'stricton' => FALSE
        )
    );

你可以指定任意多個故障轉(zhuǎn)移。

我們使用多維數(shù)組的原因是為了讓你隨意的存儲多個連接值的設置, 譬如:如果你有多個環(huán)境(開發(fā)、生產(chǎn)、測試 等等), 你能為每個環(huán)境建立獨立的連接組,并在組之間進行切換。 舉個例子,如果要設置一個 "test" 環(huán)境,你可以這樣做:

$db['test'] = array(
    'dsn'   => '',
    'hostname' => 'localhost',
    'username' => 'root',
    'password' => '',
    'database' => 'database_name',
    'dbdriver' => 'mysqli',
    'dbprefix' => '',
    'pconnect' => TRUE,
    'db_debug' => TRUE,
    'cache_on' => FALSE,
    'cachedir' => '',
    'char_set' => 'utf8',
    'dbcollat' => 'utf8_general_ci',
    'swap_pre' => '',
    'compress' => FALSE,
    'encrypt' => FALSE,
    'stricton' => FALSE,
    'failover' => array()
);

然后,設置位于配置文件中的 $active_group 變量,告訴系統(tǒng)要使用 "test" 組:

$active_group = 'test';

注解

分組的名稱 "test" 是任意的,你可以取任意的名字。默認情況下, 主連接使用 "default" 這個名稱。當然,您可以基于您的項目為它起一個更有意義的名字。

查詢構(gòu)造器

可以通過數(shù)據(jù)庫配置文件里的 $query_builder 變量對 查詢構(gòu)造器類 進行全局的設定(啟用設成 TRUE,禁用設成 FALSE,默認是 TRUE)。 如果你不用這個類,那么你可以通過將這個變量值設置成 FALSE 來減少在數(shù)據(jù)庫類初始化時對電腦資源的消耗。

$query_builder = TRUE;

注解

一些 CodeIgniter 的類,例如 Sessions,在執(zhí)行一些函數(shù)的時候需要查詢構(gòu)造器的支持。

參數(shù)解釋:

配置名 描述
dsn DSN 連接字符串(該字符串包含了所有的數(shù)據(jù)庫配置信息)
hostname 數(shù)據(jù)庫的主機名,通常位于本機,可以表示為 "localhost"
username 需要連接到數(shù)據(jù)庫的用戶名
password 登陸數(shù)據(jù)庫的密碼
database 你需要連接的數(shù)據(jù)庫名
dbdriver 數(shù)據(jù)庫類型。如:mysql、postgres、odbc 等。必須為小寫字母。
dbprefix 當使用 查詢構(gòu)造器 查詢時,可以選擇性的為表加個前綴, 它允許在一個數(shù)據(jù)庫上安裝多個 CodeIgniter 程序。
pconnect TRUE/FALSE (boolean) - 是否使用持續(xù)連接
db_debug TRUE/FALSE (boolean) - 是否顯示數(shù)據(jù)庫錯誤信息
cache_on TRUE/FALSE (boolean) - 是否開啟數(shù)據(jù)庫查詢緩存, 詳情請見 數(shù)據(jù)庫緩存類
cachedir 數(shù)據(jù)庫查詢緩存目錄所在的服務器絕對路徑
char_set 與數(shù)據(jù)庫通信時所使用的字符集
dbcollat 與數(shù)據(jù)庫通信時所使用的字符規(guī)則, 只使用于 'mysql' 和 'mysqli' 數(shù)據(jù)庫驅(qū)動
swap_pre 替換默認的 dbprefix 表前綴,該項設置對于分布式應用是非常有用的, 你可以在查詢中使用由最終用戶定制的表前綴。
schema 數(shù)據(jù)庫模式,默認為 'public',用于 PostgreSQL 和 ODBC 驅(qū)動
encrypt 是否使用加密連接。
'mysql' (deprecated), 'sqlsrv' and 'pdo/sqlsrv' drivers accept TRUE/FALSE
'mysqli' and 'pdo/mysql' drivers accept an array with the following options:
'ssl_key' - Path to the private key file
'ssl_cert' - Path to the public key certificate file
'ssl_ca' - Path to the certificate authority file
'ssl_capath' - Path to a directory containing trusted CA certificats in PEM format
'ssl_cipher' - List of allowed ciphers to be used for the encryption, separated by colons (':')
'ssl_verify' - TRUE/FALSE; Whether to verify the server certificate or not ('mysqli' only)
compress TRUE/FALSE (boolean) -是否使用客戶端壓縮協(xié)議(只用于MySQL)
stricton TRUE/FALSE (boolean) - 是否強制使用 "Strict Mode" 連接, 在開發(fā)程序時,使用 strict SQL 是一個好習慣。
port 數(shù)據(jù)庫端口號,要使用這個值,你應該添加一行代碼到數(shù)據(jù)庫配置數(shù)組。$db['default']['port'] = 5432;

注解

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

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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號