在使用數據庫之前,我們最好將數據庫進行自動連接:config/autoload.php自動加載 $autoload['libraries'] = array('database');
一些常用函數
選擇數據
$this->db->select();
允許你在SQL查詢中寫 SELECT 部分。
$this->db->where();
$this->db->or_where();
$this->db->where_in();
允許你在SQL查詢中寫 WHERE部分,其余各種where語句請看手冊。
$this->db->get();
運行選擇查詢語句並且返回結果集。可以獲取一個表的全部數據。
$this->db->like();
$this->db->or_like();
$this->db->not_like();
本函數允許你生成 LIKE 子句,在做查詢時非常有用,其余語法請看手冊。
$this->db->order_by();
幫助你設置一個 ORDER BY 子句。
$this->db->group_by();
允許你編寫查詢語句中的 GROUP BY 部分:
$this->db->distinct();
為查詢語句添加 "DISTINCT" 關鍵字:
$this->db->having();
允許你為你的查詢語句編寫 HAVING 部分。
$this->db->limit();
限制查詢所返回的結果數量:
$this->db->select_max();
為你的查詢編寫一個 "SELECT MAX(field)"。
$this->db->select_min();
為你的查詢編寫一個 "SELECT MIN(field)" 。
$this->db->select_avg();
為你的查詢編寫一個 "SELECT AVG(field)" 。
$this->db->select_sum();
為你的查詢編寫一個 "SELECT SUM(field)" 。
$this->db->join();
允許你編寫查詢中的JOIN部分。
$this->db->count_all_results();
允許你獲得某個特定的Active Record查詢所返回的結果數量。可以使用Active Record限制函數,例如 where(), or_where(), like(), or_like() 等等。
插入數據
$this->db->insert();
生成一條基於你所提供的數據的SQL插入字符串並執行查詢。你可以向函數傳遞 數組 或一個 對象。
$this->db->insert_batch();
一次插入多條數據,生成一條基於你所提供的數據的SQL插入字符串並執行查詢。你可以向函數傳遞 數組 或一個 對象。
$this->db->set();
本函數使您能夠設置inserts(插入)或updates(更新)值。它可以用來代替那種直接傳遞數組給插入和更新函數的方式。
更新數據
$this->db->update();
根據你提供的數據生成並執行一條update(更新)語句。你可以將一個數組或者對象傳遞給本函數。
$this->db->update_batch();
Generates an update string based on the data you supply, and runs the query. You can either pass an array or an object to the function. Here is an example using an array:
刪除數據
$this->db->delete();
生成並執行一條DELETE(刪除)語句。
$this->db->empty_table();
生成並執行一條DELETE(刪除)語句。
$this->db->truncate();
生成並執行一條TRUNCATE(截斷)語句。
鏈式方法
鏈式方法允許你以連接多個函數的方式簡化你的語法。考慮一下這個范例:
$this->db->select('title')->from('mytable')->where('id', $id)->limit(10, 20);
$query = $this->db->get();
說明: 鏈式方法只能在PHP 5下面運行。
查詢
$this->db->query();
要提交一個查詢,用以下函數:
$this->db->query('YOUR QUERY HERE');
query() 函數以object(對象)的形式返回一個數據庫結果集。 當使用 "read" 模式來運行查詢時, 你可以使用“顯示你的結果集”來顯示查詢結果; 當使用 "write" 模式來運行查詢時, 將會僅根據執行的成功或失敗來返回 TRUE 或 FALSE.
轉義查詢
$this->db->escape()這個函數將會確定數據類型,以便僅對字符串類型數據進行轉義。並且,它也會自動把數據用單引號括起來,所以你不必手動添加單引號,用法如下: $sql = "INSERT INTO table (title) VALUES(".$this->db->escape($title).")";
查詢輔助函數
$this->db->insert_id()
這個ID號是執行數據插入時的ID。
$this->db->affected_rows()
當執行寫入操作(insert,update等)的查詢後,顯示被影響的行數。
$this->db->count_all();
計算出指定表的總行數並返回。在第一個參數中寫入被提交的表名。
生成查詢記錄集
result()
該方法執行成功返回一個object 數組,失敗則返回一個空數組。
result_array()
該方法執行成功時將記錄集作為關聯數組返回。失敗時返回空數組。
row()
該函數將當前請求的第一行數據作為 object 返回。
你可以傳遞參數(參數是行的索引)以便獲得某一行的數據。比如我們要獲得第 5 行的數據: $row = $query->row(4);
row_array()
功能與 row() 一樣, 區別在於該函數返回的是一個數組。
除此以外, 我們還可以使用下面的方法通過游標的方式獲取記錄:
$row = $query->first_row()
$row = $query->last_row()
$row = $query->next_row()
$row = $query->previous_row()
默認情況下他們將返回一個 object,同時你也可以傳遞參數 "array" 以便使用 array 的方式獲取數據 $row = $query->first_row('array')
$row = $query->last_row('array')
$row = $query->next_row('array')
$row = $query->previous_row('array')
結果集輔助函數
$query->num_rows()
該函數將會返回當前請求的行數。
$query->num_fields()
該函數返回當前請求的字段數(列數):
$query->free_result()
該函數將會釋放當前查詢所占用的內存並刪除其關聯的資源標識。
自動連接
“自動連接” 功能將在每個一頁面加載時被自動實例化數據庫類。要啟用“自動連接”,可在application/config/autoload.php中的 library 數組裡添加 database:
$autoload['libraries'] = array('database');
手動連接
如果僅僅是一部分頁面要求數據庫連接,你可以在你有需要的函數裡手工添加如下代碼或者在你的類裡手工添加以供該類使用。
$this->load->database();
連接多數據庫
如果你需要同時連接多於一個的數據庫,你可以用以下方式來實現:
$DB1 = $this->load->database('group_one', TRUE);
$DB2 = $this->load->database('group_two', TRUE);
表數據
$this->db->list_tables();
返回一個包含當前連接數據庫中所有表名稱的數組。
$this->db->table_exists();
有時,在對某個表執行操作之前,使用該函數判斷指定表是否存在很有用。返回一個布爾值。
數據庫工具類
重要提示: 初始化數據庫工具類之前,你的數據庫驅動必須已經運行,因為工具類依賴於此。
加載工具類: $this->load->dbutil()
一旦初始化完畢,你可以通過 $this->dbutil 對象來訪問成員函數:
$this->dbutil->list_databases()
$this->dbutil->database_exists();
$this->dbutil->xml_from_result($db_result)
$this->dbutil->backup()
數據庫緩存類
激活緩存需要三步:
1、在服務器上創建一個可寫的目錄以便保存緩存文件。
2、在文件 application/config/database.php 中$db['xxxx']['cachedir']設置其目錄。
3、激活緩存特性,可以在文件 application/config/database.php 中設置全局選項$db['xxxx']['cache_on']='TRUE',也可以用以本頁下面的方法手動設置。
一旦被激活,每一次含有數據庫查詢的頁面被加載時緩存就會自動發生。
當有數據庫更新,我們需要刪除緩存文件
$this->db->cache_delete()
刪除緩存文件與特定網頁。如果你需要清除緩存後,更新您的數據庫
$this->db->cache_delete('/blog', 'comments');
注意,手冊上寫的是 $this->db->cache_delete('blog', 'comments');但根據實際測試應該在控制器名字前加斜槓'/'才能正確執行。
$this->db->cache_delete_all()
清除所有所有的緩存文件。
數據庫維護類
注意: 欲初始化數據庫維護類,請確保你的數據庫驅動已經運行,因為該類依賴於數據庫驅動。
使用如下方法載入數據庫維護類:
$this->load->dbforge()
一旦初始化,就可以使用$this->dbforge 對象訪問類中函數:
$this->dbforge->create_database('db_name')
允許你創建由第一個參數指定的數據庫。
$this->dbforge->drop_database('db_name')
允許你刪除由第一個參數指定的數據庫。
$this->dbforge->create_table('table_name');
聲明了字段和鍵之後,你就可以創建一個表。