?
This document uses PHP Chinese website manual Release
若要提交查詢,請使用查詢職能:
$this->db->query('YOUR QUERY HERE');
query()函數(shù)在運(yùn)行“讀取”類型查詢時(shí)返回?cái)?shù)據(jù)庫結(jié)果對象,您可以使用該查詢來顯示結(jié)果。當(dāng)“寫入”類型的查詢運(yùn)行時(shí),它只是返回TRUE或FALSE,取決于成功或失敗。在檢索數(shù)據(jù)時(shí),您通常會(huì)將查詢分配給您自己的變量,如下所示:
$query = $this->db->query('YOUR QUERY HERE');
該simple_query方法是$這- > DB->查詢()方法的簡化版本。它不會(huì)返回?cái)?shù)據(jù)庫結(jié)果集,也不會(huì)設(shè)置查詢計(jì)時(shí)器或編譯綁定數(shù)據(jù),也不會(huì)存儲(chǔ)查詢以進(jìn)行調(diào)試。它只是讓你提交一個(gè)查詢。大多數(shù)用戶很少使用此功能。
它返回?cái)?shù)據(jù)庫驅(qū)動(dòng)程序的“執(zhí)行”函數(shù)返回的任何內(nèi)容。對于寫入類型查詢(例如INSERT,DELETE或UPDATE語句(這是真正應(yīng)該使用的語句)以及成功的資源/對象)的成功或失敗,對于具有可捕獲結(jié)果的查詢,這通常為TRUE / FALSE。
if ($this->db->simple_query('YOUR QUERY')){ echo "Success!";}else{ echo "Query failed!";}
注
PostgreSQL的pg_exec()
函數(shù)(例如)總是會(huì)在成功時(shí)返回資源,即使是寫入類型查詢也是如此。所以記住,如果你正在尋找一個(gè)布爾值。
如果您已經(jīng)配置了數(shù)據(jù)庫前綴,并希望將其添加到表名中以供在本機(jī)SQL查詢中使用,則可以使用以下方法:
$this->db->dbprefix('tablename'); // outputs prefix_tablename
如果出于任何原因,您希望在不需要?jiǎng)?chuàng)建新連接的情況下以編程方式更改前綴,則可以使用以下方法:
$this->db->set_dbprefix('newprefix');$this->db->dbprefix('tablename'); // outputs newprefix_tablename
在許多數(shù)據(jù)庫中,建議保護(hù)表和字段名稱 - 例如在MySQL中使用反引號。查詢生成器查詢會(huì)自動(dòng)受到保護(hù),但是如果您需要手動(dòng)保護(hù)可以使用的標(biāo)識(shí)符:
$this->db->protect_identifiers('table_name');
重要
雖然查詢生成器將盡最大努力正確引用您提供的任何字段和表名稱,但請注意,它不適用于任意用戶輸入。不要為其提供未經(jīng)處理的用戶數(shù)據(jù)。
假設(shè)你在你的數(shù)據(jù)庫配置文件中指定了一個(gè)前綴,這個(gè)函數(shù)也會(huì)為你的表添加一個(gè)表前綴。要通過第二個(gè)參數(shù)啟用前綴設(shè)置TRUE(布爾值):
$this->db->protect_identifiers('table_name', TRUE);
在將數(shù)據(jù)提交到數(shù)據(jù)庫之前,將其轉(zhuǎn)義是一種非常好的安全實(shí)踐。CodeIgniter有三種方法可以幫助您這樣做:
$ this-> db-> escape()該函數(shù)確定數(shù)據(jù)類型,以便它只能轉(zhuǎn)義字符串?dāng)?shù)據(jù)。它還會(huì)自動(dòng)為數(shù)據(jù)添加單引號,因此您不必:$ sql =“INSERT INTO table(title)VALUES(”。$ this-> db-> escape($ title)?!埃?
$ this-> db-> escape_str()無論類型如何,該函數(shù)都會(huì)將傳遞給它的數(shù)據(jù)轉(zhuǎn)義出來。大多數(shù)時(shí)候你會(huì)使用上述功能而不是這個(gè)功能。使用這樣的功能:
$ sql =“INSERT INTO table(title)VALUES('”。$ this-> db-> escape_str($ title)?!?#39;)”;
$ this-> db-> escape_like_str()當(dāng)在LIKE條件下使用字符串時(shí),應(yīng)使用此方法,以便字符串中的LIKE通配符('%','_')也能正確轉(zhuǎn)義。
$search = '20% raise';$sql = "SELECT id FROM table WHERE column LIKE '%" . $this->db->escape_like_str($search)."%' ESCAPE '!'";
重要
該escape_like_str()
方法使用'!' (感嘆號)為LIKE條件轉(zhuǎn)義特殊字符。因?yàn)榇朔椒〞?huì)轉(zhuǎn)義部分字符串,而您將自行換行,所以它不能自動(dòng)ESCAPE '!'
為您添加條件,因此您必須手動(dòng)執(zhí)行此操作。
綁定使您能夠簡化查詢語法,方法是讓系統(tǒng)為您將查詢放在一起。考慮以下示例:
$sql = "SELECT * FROM some_table WHERE id = ? AND status = ? AND author = ?";$this->db->query($sql, array(3, 'live', 'Rick'));
查詢中的問號將自動(dòng)替換為查詢函數(shù)第二個(gè)參數(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'));
產(chǎn)生的查詢將是:
SELECT * FROM some_table WHERE id IN (3,6) AND status = 'live' AND author = 'Rick'
使用綁定的次要好處是自動(dòng)轉(zhuǎn)義值,從而產(chǎn)生更安全的查詢。您不必記住手動(dòng)轉(zhuǎn)義數(shù)據(jù);引擎會(huì)自動(dòng)為您執(zhí)行此操作。
$這 - > DB->誤差();
如果您需要獲取發(fā)生的最后一個(gè)錯(cuò)誤,那么error()方法將返回一個(gè)包含其代碼和消息的數(shù)組。這里有個(gè)簡單的例子:
if ( ! $this->db->simple_query('SELECT `example_field` FROM `example_table`')){ $error = $this->db->error(); // Has keys 'code' and 'message'}