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

CodeIgniter 數據庫類完整使用指南:從配置到 Active Record

     編輯:PHP 綜合知識

初始化與配置

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 訪問。

查詢操作

原生 SQL 查詢

$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():釋放記憶體

資料操作(CRUD)

插入資料

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

Active Record 查詢構建器

鏈式調用構建複雜查詢,自動轉義防注入:

$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 於開發環境,生產環境關閉並記錄日誌

最佳實踐提醒

  1. 統一使用 utf8mb4 字符集支援 Emoji
  2. 生產環境關閉 db_debug,改用日誌記錄
  3. 大量寫入時考慮批次 insert_batch() 提升性能
  4. 適時使用 cache_on 緩存頻繁讀取的查詢
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved