CodeIgniter 查詢

2018-07-21 15:41 更新

查詢

基本查詢

常規(guī)查詢

要提交一個查詢,使用 query 函數(shù):

$this->db->query('YOUR QUERY HERE');

當你執(zhí)行讀類型的查詢(如:SELECT)時,query() 函數(shù)將以對象形式 返回一個結(jié)果集,參考這里來 顯示你的結(jié)果。 當你執(zhí)行寫類型的查詢(如:INSERT、DELETE、UPDATE)時,函數(shù)將簡單的返回 TRUE 或 FALSE 來表示操作是否成功。 你可以將函數(shù)返回的結(jié)果賦值給一個變量,這樣你就可以根據(jù)這個變量來獲取 數(shù)據(jù)了,像下面這樣:

$query = $this->db->query('YOUR QUERY HERE');

簡化查詢

simple_query 函數(shù)是 $this->db->query() 的簡化版。它不會返回查詢的 結(jié)果集,不會去設置查詢計數(shù)器,不會去編譯綁定的數(shù)據(jù),不會去存儲查詢的調(diào)試信息。 它只是用于簡單的提交一個查詢,大多數(shù)用戶并不會用到這個函數(shù)。

simple_query 函數(shù)直接返回數(shù)據(jù)庫驅(qū)動器的 "execute" 方法的返回值。對于寫類型的 查詢(如:INSERT、DELETE、UPDATE),返回代表操作是否成功的 TRUE 或 FALSE;而 對于讀類型的成功查詢,則返回代表結(jié)果集的對象。

if ($this->db->simple_query('YOUR QUERY'))
{
    echo "Success!";
}
else
{
    echo "Query failed!";
}

注解

對于所有的查詢,如果成功執(zhí)行的話,PostgreSQL 的 pg_exec() 函數(shù) 都會返回一個結(jié)果集對象,就算是寫類型的查詢也是這樣。如果你想判斷查詢執(zhí)行是否 成功或失敗,請記住這一點。

指定數(shù)據(jù)庫前綴

如果你配置了一個數(shù)據(jù)庫前綴參數(shù),想把它加上你的 SQL 語句里的表名前面, 你可以調(diào)用下面的方法:

$this->db->dbprefix('tablename'); // outputs prefix_tablename

如果你想動態(tài)的修改這個前綴,而又不希望創(chuàng)建一個新的數(shù)據(jù)庫連接,可以使用這個方法:

$this->db->set_dbprefix('newprefix');
$this->db->dbprefix('tablename'); // outputs newprefix_tablename

保護標識符

在很多數(shù)據(jù)庫里,保護表名和字段名是可取的,例如在 MySQL 數(shù)據(jù)庫里使用反引號。 使用查詢構(gòu)造器會自動保護標識符,盡管如此,你還是可以像下面這樣手工來保護:

$this->db->protect_identifiers('table_name');

重要

盡管查詢構(gòu)造器會盡力保護好你輸入的表名和字段名,但值得注意的是, 它并不是被設計來處理任意用戶輸入的,所以,請不要傳未處理的數(shù)據(jù)給它。

這個函數(shù)也可以為你的表名添加一個前綴,如果你在數(shù)據(jù)庫配置文件中定義了 dbprefix 參數(shù),通過將這個函數(shù)的第二個參數(shù)設置為 TRUE 來啟用前綴:

$this->db->protect_identifiers('table_name', TRUE);

轉(zhuǎn)義查詢

在提交數(shù)據(jù)到你的數(shù)據(jù)庫之前,確保先對其進行轉(zhuǎn)義是個非常不錯的做法。 CodeIgniter 有三個方法來幫你做到這一點:

  1. $this->db->escape() 這個函數(shù)會檢測數(shù)據(jù)類型,僅轉(zhuǎn)義字符串類型的數(shù)據(jù)。 它會自動用單引號將你的數(shù)據(jù)括起來,你不用手動添加:

    $sql = "INSERT INTO table (title) VALUES(".$this->db->escape($title).")";
  2. $this->db->escape_str() 這個函數(shù)忽略數(shù)據(jù)類型,對傳入的數(shù)據(jù)進行轉(zhuǎn)義, 這個方法并不常用,一般情況都是使用上面的那個方法。方法的使用代碼如下:

    $sql = "INSERT INTO table (title) VALUES('".$this->db->escape_str($title)."')";
  3. $this->db->escape_like_str() 這個函數(shù)用于處理 LIKE 語句中的字符串,

    這樣,LIKE 通配符('%', '_')可以被正確的轉(zhuǎn)義。

$search = '20% raise';
$sql = "SELECT id FROM table WHERE column LIKE '%" .
    $this->db->escape_like_str($search)."%'";

查詢綁定

查詢綁定可以簡化你的查詢語法,它通過系統(tǒng)自動的為你將各個查詢組裝在一起。 參考下面的例子:

$sql = "SELECT * FROM some_table WHERE id = ? AND status = ? AND author = ?";
$this->db->query($sql, array(3, 'live', 'Rick'));

查詢語句中的問號將會自動被第二個參數(shù)位置的數(shù)組的相應的值替代。

也可以使用數(shù)組的數(shù)組進行綁定,里面的數(shù)組會被轉(zhuǎn)換成 IN 語句的集合:

$sql = "SELECT * FROM some_table WHERE id IN ? AND status = ? AND author = ?";
$this->db->query($sql, array(array(3, 6), 'live', 'Rick'));

上面的例子會被轉(zhuǎn)換為這樣的查詢:

SELECT * FROM some_table WHERE id IN (3,6) AND status = 'live' AND author = 'Rick'

使用查詢綁定的第二個好處是:所有的值會被自動轉(zhuǎn)義,生成安全的查詢語句。 你不再需要手工進行轉(zhuǎn)義,系統(tǒng)會自動進行。

錯誤處理

$this->db->error();

要獲取最近一次發(fā)生的錯誤,使用 error() 方法可以得到一個包含錯誤代碼和錯誤消息的數(shù)組。 這里是一個簡單例子:

if ( ! $this->db->simple_query('SELECT `example_field` FROM `example_table`'))
{
    $error = $this->db->error(); // Has keys 'code' and 'message'
}
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號