CodeIgniter 的數據庫類需在 application/config/database.php 中配置連接參數,支援多環境切換:
$db['default'] = array(
'hostname' => 'localhost',
'username' => 'root',
'password' => '',
'database' => 'my_db',
'dbdriver' => 'mysqli', // 建議使用 mysqli
'dbprefix' => '',
'pconnect' => TRUE,
'db_debug' => (ENVIRONMENT !== 'production'),
'cache_on' => FALSE,
'cachedir' => '',
'char_set' => 'utf8mb4',
'dbcollat' => 'utf8mb4_general_ci',
'port' => 3306,
);
控制器中載入:$this->load->database(); 載入後即可通過 $this->db 訪問。
$query = $this->db->query('SELECT name, email FROM users WHERE status = ?', array(1));
| 方法 | 返回類型 | 適用場景 |
|---|---|---|
result() | 物件陣列 | $row->name 物件式訪問 |
result_array() | 關聯陣列 | $row['name'] 陣列式訪問 |
row() | 單一物件 | 預期僅一筆結果 |
row_array() | 單一關聯陣列 | 同上,陣列格式 |
$query->num_rows():結果筆數$query->num_fields():欄位數$query->free_result():釋放記憶體$data = array('title' => '文章標題', 'content' => '內容', 'created_at' => date('Y-m-d H:i:s'));
$this->db->insert('articles', $data);
$insert_id = $this->db->insert_id(); // 獲取自增 ID
$this->db->where('id', 5);
$this->db->update('articles', array('title' => '新標題'));
$affected = $this->db->affected_rows();
$this->db->delete('articles', array('id' => 5));
鏈式調用構建複雜查詢,自動轉義防注入:
$this->db->select('id, title, created_at')
->from('articles')
->where('status', 1)
->where_in('category_id', array(1,2,3))
->like('title', '關鍵字')
->order_by('created_at', 'DESC')
->limit(10, 0)
->get();
select()、select_max()、select_min() 等聚合join()、join('table2', 'table1.id = table2.uid', 'left')group_by()、having()or_where()、or_like() 邏輯或$this->db->trans_start();
$this->db->insert('orders', $order_data);
$this->db->update('inventory', array('stock -=' => $qty), array('sku' => $sku));
$this->db->trans_complete();
if ($this->db->trans_status() === FALSE) {
// 回滾邏輯
}
trans_start()/trans_complete() 為自動事務模式,任何查詢失敗自動回滾。
$test_db = $this->load->database('test', TRUE); // 返回 DB 實例
$test_db->query('SELECT * FROM test_table');
第二個參數 TRUE 表示返回實例而非賦值給 $this->db。
$this->db->last_query():查看最後執行的 SQL$this->db->display_error():顯示錯誤訊息db_debug 於開發環境,生產環境關閉並記錄日誌utf8mb4 字符集支援 Emojidb_debug,改用日誌記錄insert_batch() 提升性能cache_on 緩存頻繁讀取的查詢