查詢 (Queries)
$this->db->query();
可以使用下面的函數來提交查尋:
$this->db->query('YOUR QUERY HERE');
query() 函數以 object 方式回傳資料庫結果,當使用 "read" 模式來進行查詢的時候, 你可以使用"顯示您的結果"來顯示查詢結果. 當使用寫入查詢的時候,會依據執行成功或者失敗來回傳 TRUE 或 FALSE。 當接受到資料,您可以自行決定查詢語法如下:
$query = $this->db->query('YOUR QUERY HERE');
$this->db->simple_query();
這是 $this->db->query() 簡化版的函數. 它只會在成功或者失敗的時候回傳真(TRUE)/假(FALSE). 它不會回傳資料庫結果集合,也沒有設置查詢定時器,或編譯綁定數據,或存儲您的查詢診對結果。簡單的說,它只是讓你提交查詢。大多數用戶很少會使用此功能.
自訂資料庫字首名稱 (Adding Database prefixes manually)
假如您已經設定資料庫表格的字首名稱,並且希望能自己手動增加,可以參考底下作法.
$this->db->dbprefix('tablename');
// 輸出 prefix_tablename
不管任何理由,您想要在程式中任意修改 prefix 而不用在建立一個新的 connection,請使用底下的方法來達成:
$this->db->set_dbprefix('newprefix');
$this->db->dbprefix('tablename');
// outputs newprefix_tablename
保護標識符號 (Protecting identifiers)
在眾多資料庫中最好保護資料表跟欄位名稱 - 例如在 MySQL 使用反引號 backticks (``). Active Record 查詢都已被自動的保護,如果您需要手動保護的標識符號可以使用:
$this->db->protect_identifiers('table_name');
根據資料庫設定檔裡面的 prefix 設定,此函數會在資料表前面加上 prefix。您可以透過設定第二個參數為 TRUE (boolen) 來啟動 prefix:
$this->db->protect_identifiers('table_name', TRUE);
跳脫查詢(Escaping Queries)
這是一個非常良好的安全去跳脫資料,然後在傳送到資料庫。CodeIgniter 提供兩個方法可以幫助您做到這一點:
- $this->db->escape() 此函數決定了可以跳脫的資料型態。它會自動增加單引號(single quotes)在資料旁邊,所以你不必加上單引號:
$sql = "INSERT INTO table (title) VALUES(".$this->db->escape($title).")";
- $this->db->escape_str() 此函數可以跳脫任何資料型態。在大多數的情況底下,都是使用上述的函數多於使用此函數。此函數用法如下:
$sql = "INSERT INTO table (title) VALUES('".$this->db->escape_str($title)."')";
- $this->db->escape_like_str() 此函數可以用在跳脫 SQL Like 語法,像是 wildcards ('%', '_') 在此函數都會被跳多。
$search = '20% raise';
$sql = "SELECT id FROM table WHERE column LIKE '%".$this->db->escape_like_str($search)."%'";
封裝查詢(Query Bindings)
封裝可以簡化你的查詢語法,讓系統幫忙放入資料為您查詢. 請參照底下範例:
$sql = "SELECT * FROM some_table WHERE id = ? AND status = ? AND author = ?";
$this->db->query($sql, array(3, 'live', 'Rick'));
該問號會自動改為查詢函數的第二個參數陣列資料值.
使用封裝的第二個好處是系統會自動幫忙轉義跳脫(Escaping Queries)字串,形成較安全的查詢語法。您就不需要手動的處理這些資料; 系統將會自動的幫忙處理.