application/config/database.php 是 CI 專案資料庫連線的核心設定檔。本文系統解析各參數用途、三種連線參數傳遞方式、多資料庫連線模式與 PDO 驅動配置實例。
$active_group = 'default'; // 預設使用的群組名稱
$active_record = TRUE; // 是否啟用 Query Builder (AR 模式)
$db['default'] = [
'hostname' => 'localhost',
'username' => 'root',
'password' => '123456',
'database' => 'test',
'dbdriver' => 'mysqli', // 建議使用 mysqli,mysql 驅動已棄用
'dbprefix' => '',
'pconnect' => FALSE, // 生產環境建議 FALSE,避免 sleep 進程堆積
'db_debug' => TRUE, // 開發環境 TRUE,生產環境 FALSE
'cache_on' => FALSE,
'cachedir' => '',
'char_set' => 'utf8mb4', // 建議 utf8mb4 支援完整 Unicode
'dbcollat' => 'utf8mb4_general_ci',
'swap_pre' => '',
'autoinit' => TRUE, // TRUE 即連線,FALSE 延遲至首次查詢
'stricton' => FALSE, // TRUE 開啟 SQL 嚴格模式
// 'port' => 3306, // 非預設埠號時需顯式指定
];
| 參數 | 建議值 | 說明 |
|---|---|---|
pconnect | FALSE | 長連線易導致資料庫 sleep 進程暴增,拒絕新連線。高併發環境必須關閉。 |
db_debug | 開發 TRUE / 產 FALSE | 生產環境開啟會直接輸出 SQL 錯誤細節,洩露資料庫結構。 |
char_set | utf8mb4 | 支援 Emoji 與生僻字,utf8 僅支援 BMP 平面。 |
stricton | FALSE | 開啟後 INSERT '' INTO auto_inc_col 等不規範 SQL 會直接拋異常,需代碼層面嚴格處理才建議開啟。 |
$this->load->database($params, $return, $active_record)$this->load->database('default'),空值則用 $active_group$db['default'] 的一維陣列,適合動態構建連線資訊mysqli://user:pass@host/db?charset=utf8mb4 或 pdo://...,支援標準 URI 格式預設 $this->load->database() 會將連線物件賦值給 $this->db,再次呼叫不會重新連線。需同時操作多庫時,使用 $return = TRUE 取回連線物件:
$db1 = $this->load->database('default', TRUE);
$db2 = $this->load->database('report', TRUE);
// 使用
$db1->query('SELECT ...');
$db2->query('SELECT ...');
public function __construct($group_name = '') {
parent::__construct();
$db_conn_name = $group_name === '' ? 'db' : 'db_'.$group_name;
$CI =& get_instance();
if (isset($CI->{$db_conn_name}) && is_object($CI->{$db_conn_name})) {
$this->db = $CI->{$db_conn_name};
} else {
$CI->{$db_conn_name} = $this->db = $this->load->database($group_name, TRUE);
}
}
// 使用
$user_model = new User_model('slave'); // 自動連接 slave 群組
$db['default']['dbdriver'] = 'pdo'; $db['default']['hostname'] = 'mysql:host=localhost;dbname=test;charset=utf8mb4'; $db['default']['username'] = 'root'; $db['default']['password'] = '123456'; $db['default']['database'] = 'test'; // PDO 模式下此欄位仍需保留(給 AR 使用) // 其他參數同 mysqli
精準配置 database.php、善用多庫連線模式、生產環境關閉長連線與除錯輸出,是 CI 專案資料庫層穩定、安全、高效的基石。