首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

CodeIgniter 資料庫配置深度解析:database.php 參數詳解、多庫連線與 PDO 設定

     編輯:PHP 相關知識

CodeIgniter 資料庫配置深度解析:database.php 參數詳解、多庫連線與 PDO 設定

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,       // 非預設埠號時需顯式指定
];

關鍵參數避坑指南

參數建議值說明
pconnectFALSE長連線易導致資料庫 sleep 進程暴增,拒絕新連線。高併發環境必須關閉。
db_debug開發 TRUE / 產 FALSE生產環境開啟會直接輸出 SQL 錯誤細節,洩露資料庫結構。
char_setutf8mb4支援 Emoji 與生僻字,utf8 僅支援 BMP 平面。
strictonFALSE開啟後 INSERT '' INTO auto_inc_col 等不規範 SQL 會直接拋異常,需代碼層面嚴格處理才建議開啟。

三種連線參數傳遞方式 $this->load->database($params, $return, $active_record)

  1. 字串(群組名):$this->load->database('default'),空值則用 $active_group
  2. 陣列(完整配置):直接傳入類似 $db['default'] 的一維陣列,適合動態構建連線資訊
  3. DSN 字串: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 ...');

進階:在 MY_Model 中自動管理多庫連線

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 群組

PDO 驅動配置範例

$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 專案資料庫層穩定、安全、高效的基石。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved