W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
要提交一個查詢,使用 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ù),想把它加上你的 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);
在提交數(shù)據(jù)到你的數(shù)據(jù)庫之前,確保先對其進行轉(zhuǎn)義是個非常不錯的做法。 CodeIgniter 有三個方法來幫你做到這一點:
$this->db->escape() 這個函數(shù)會檢測數(shù)據(jù)類型,僅轉(zhuǎn)義字符串類型的數(shù)據(jù)。 它會自動用單引號將你的數(shù)據(jù)括起來,你不用手動添加:
$sql = "INSERT INTO table (title) VALUES(".$this->db->escape($title).")";
$this->db->escape_str() 這個函數(shù)忽略數(shù)據(jù)類型,對傳入的數(shù)據(jù)進行轉(zhuǎn)義, 這個方法并不常用,一般情況都是使用上面的那個方法。方法的使用代碼如下:
$sql = "INSERT INTO table (title) VALUES('".$this->db->escape_str($title)."')";
$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'
}
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: