v2模板中支持PHP語(yǔ)法,同時(shí)支持調(diào)用CI框架數(shù)據(jù)庫(kù)對(duì)象調(diào)用
PHP語(yǔ)法標(biāo)簽
{php} $query = $ci->db->get('mytable'); // Produces: SELECT * FROM mytable {/php}
或者
<?php $query=$ci->db->get('mytable'); // Produces: SELECT * FROM mytable ?>
以下語(yǔ)法來(lái)自codeigniter中國(guó)站
選擇數(shù)據(jù)
下面的函數(shù)幫助你構(gòu)建 SQL SELECT語(yǔ)句。
備注:如果你正在使用 PHP5,你可以在復(fù)雜情況下使用鏈?zhǔn)秸Z(yǔ)法。本頁(yè)面底部有具體描述。
$ci->db->get();
運(yùn)行選擇查詢語(yǔ)句并且返回結(jié)果集。可以獲取一個(gè)表的全部數(shù)據(jù)。
$query = $ci->db->get('mytable'); // Produces: SELECT * FROM mytable
第二和第三個(gè)參數(shù)允許你設(shè)置一個(gè)結(jié)果集每頁(yè)紀(jì)錄數(shù)(limit)和結(jié)果集的偏移(offset)
$query = $ci->db->get('mytable', 10, 20); // Produces: SELECT * FROM mytable LIMIT 20, 10 (MySQL語(yǔ)法. 其他數(shù)據(jù)庫(kù)在語(yǔ)法上略有不同)
注意:第二參數(shù)是每頁(yè)紀(jì)錄數(shù),第三個(gè)參數(shù)是偏移
你會(huì)注意到上面的函數(shù)由一個(gè)變量$query執(zhí)行,這個(gè)$query可以用來(lái)顯示結(jié)果集。
$query = $ci->db->get('mytable'); foreach ($query->result() as $row) { echo $row->title; }
請(qǐng)?jiān)L問(wèn)查詢結(jié)果頁(yè)查看詳細(xì)的生成結(jié)果的方法。
$ci->db->get_where();
跟上面的函數(shù)一樣,只是它允許你在函數(shù)的第二個(gè)參數(shù)那里添加一個(gè) where 從句,從而不用使用 db->where() 這個(gè)函數(shù):
$query = $ci->db->get_where('mytable', array('id' => $id), $limit, $offset);
請(qǐng)閱讀下面的 where 函數(shù)了解更多。
注意: get_where() 在以前的版本中寫作 getwhere(),這是已經(jīng)過(guò)時(shí)的用法,現(xiàn)已從代碼中移除 getwhere()。
$ci->db->select();
允許你在SQL查詢中寫 SELECT 部分:
$ci->db->select('title, content, date'); $query = $ci->db->get('mytable'); // Produces: SELECT title, content, date FROM mytable
注意: 如果你要查詢表中的所有行,你可以不用寫這個(gè)函數(shù)。省略后,CodeIgniter 會(huì)認(rèn)為你要查詢 全部行(SELECT *)。
$ci->db->select() 可接受一個(gè)可選的第二個(gè)參數(shù)。如果你把它設(shè)為FALSE, CodeIgniter 將不會(huì)使用反引號(hào)保護(hù)你的字段或者表名 。這在進(jìn)行復(fù)合查詢時(shí)很有用。
$ci->db->select("('SELECT SUM(payments.amount) FROM payments WHERE payments.invoice_id=4') AS amount_paid", FALSE); $query = $ci->db->get('mytable'); $ci->db->select_max();
為你的查詢編寫一個(gè) "SELECT MAX(field)"。你可以選擇性的給出第二個(gè)參數(shù),以便重命名結(jié)果字段名。
$ci->db->select_max('age'); $query = $ci->db->get('members'); // Produces: SELECT MAX(age) as age FROM members $ci->db->select_max('age', 'member_age'); $query = $ci->db->get('members'); // Produces: SELECT MAX(age) as member_age FROM members $ci->db->select_min();
為你的查詢編寫一個(gè) "SELECT MIN(field)" 。與 select_max() 相似, 你可以選擇性地給出第二個(gè)參數(shù),用來(lái)給結(jié)果字段重命名。
$ci->db->select_min('age'); $query = $ci->db->get('members'); // 生成: SELECT MIN(age) as age FROM members $ci->db->select_avg();
為你的查詢編寫一個(gè) "SELECT AVG(field)" 。與 select_max() 相似, 你可以選擇性地給出第二個(gè)參數(shù),用來(lái)給結(jié)果字段重命名。
$ci->db->select_avg('age'); $query = $ci->db->get('members'); // 生成: SELECT AVG(age) as age FROM members $ci->db->select_sum();
為你的查詢編寫一個(gè) "SELECT SUM(field)" 。與 select_max() 相似, 你可以選擇性地給出第二個(gè)參數(shù),用來(lái)給結(jié)果字段重命名。
$ci->db->select_sum('age'); $query = $ci->db->get('members'); // 生成: SELECT SUM(age) as age FROM members $ci->db->from();
允許你編寫查詢中的FROM部分:
$ci->db->select('title, content, date'); $ci->db->from('mytable'); $query = $ci->db->get(); // 生成: SELECT title, content, date FROM mytable
說(shuō)明: 正如前面所說(shuō),查詢中的FROM部分可以在 $ci->db->get() 函數(shù)中指定,所以你可以根據(jù)自己的喜好來(lái)選擇使用哪個(gè)方法。
$ci->db->join();
允許你編寫查詢中的JOIN部分:
$ci->db->select('*'); $ci->db->from('blogs'); $ci->db->join('comments', 'comments.id = blogs.id'); $query = $ci->db->get(); // 生成: // SELECT * FROM blogs // JOIN comments ON comments.id = blogs.id
如果你想要在查詢中使用多個(gè)連接,可以多次調(diào)用本函數(shù)。
如果你需要指定 JOIN 的類型,你可以通過(guò)本函數(shù)的第三個(gè)參數(shù)來(lái)指定。可選項(xiàng)包括:left, right, outer, inner, left outer, 以及 right outer.
$ci->db->join('comments', 'comments.id = blogs.id', 'left'); // 生成: LEFT JOIN comments ON comments.id = blogs.id $ci->db->where();
本函數(shù)允許你使用四種方法中的一種來(lái)設(shè)置 WHERE 子句:
說(shuō)明: 傳遞給本函數(shù)的所有值都會(huì)被自動(dòng)轉(zhuǎn)義,以便生成安全的查詢。
簡(jiǎn)單的 key/value 方法: $ci->db->where('name', $name);
// 生成: WHERE name = 'Joe'
請(qǐng)注意等號(hào)已經(jīng)為你添加。
如果你多次調(diào)用本函數(shù),那么這些條件會(huì)被 AND 連接起來(lái):
$ci->db->where('name', $name); $ci->db->where('title', $title); $ci->db->where('status', $status); // WHERE name = 'Joe' AND title = 'boss' AND status = 'active'
自定義 key/value 方法:
你可以在第一個(gè)參數(shù)中包含一個(gè)運(yùn)算符,以便控制比較:
$ci->db->where('name !=', $name); $ci->db->where('id <', $id); // 生成: WHERE name != 'Joe' AND id < 45
關(guān)聯(lián)數(shù)組方法: $array = array('name' => $name, 'title' => $title, 'status' => $status);
$ci->db->where($array); // 生成: WHERE name = 'Joe' AND title = 'boss' AND status = 'active'
使用這個(gè)方法時(shí)你也可以包含運(yùn)算符:
$array = array('name !=' => $name, 'id <'> $id, 'date >' => $date); $ci->db->where($array);<!--'--><!--'-->
自定義字符串:
你可以手動(dòng)的編寫子句:
$where = "name='Joe' AND status='boss' OR status='active'"; $ci->db->where($where);
$ci->db->where() 接受可選的第三個(gè)參數(shù)。如果你將它設(shè)置為 FALSE, CodeIgniter 將不會(huì)為你那些包含反勾號(hào)的字段名或表名提供保護(hù)。
$ci->db->where('MATCH (field) AGAINST ("value")', NULL, FALSE); $ci->db->or_where();
本函數(shù)與上面的那個(gè)幾乎完全相同,唯一的區(qū)別是本函數(shù)生成的子句是用 OR 來(lái)連接的:
$ci->db->where('name !=', $name); $ci->db->or_where('id >', $id); // 生成: WHERE name != 'Joe' OR id > 50
說(shuō)明: or_where() 以前被叫作 orwhere(), 后者已經(jīng)過(guò)時(shí),現(xiàn)已從代碼中移除 orwhere()。
$ci->db->where_in();
生成一段 WHERE field IN ('item', 'item') 查詢語(yǔ)句,如果合適的話,用 AND 連接起來(lái)。
$names = array('Frank', 'Todd', 'James'); $ci->db->where_in('username', $names); // 生成: WHERE username IN ('Frank', 'Todd', 'James') $ci->db->or_where_in();
生成一段 WHERE field IN ('item', 'item') 查詢語(yǔ)句,如果合適的話,用 OR 連接起來(lái)。
$names = array('Frank', 'Todd', 'James'); $ci->db->or_where_in('username', $names); // 生成: OR username IN ('Frank', 'Todd', 'James') $ci->db->where_not_in();
生成一段 WHERE field NOT IN ('item', 'item') 查詢語(yǔ)句,如果合適的話,用 AND 連接起來(lái)。
$names = array('Frank', 'Todd', 'James'); $ci->db->where_not_in('username', $names); // 生成: WHERE username NOT IN ('Frank', 'Todd', 'James') $ci->db->or_where_not_in();
生成一段 WHERE field NOT IN ('item', 'item') 查詢語(yǔ)句,如果合適的話,用 OR 連接起來(lái)。
$names = array('Frank', 'Todd', 'James'); $ci->db->or_where_not_in('username', $names); // 生成: OR username NOT IN ('Frank', 'Todd', 'James') $ci->db->like();
本函數(shù)允許你生成 LIKE 子句,在做查詢時(shí)非常有用。
說(shuō)明: 傳遞給本函數(shù)的所有值都會(huì)被自動(dòng)轉(zhuǎn)義。
簡(jiǎn)單 key/value 方式:
$ci->db->like('title', 'match'); // 生成: WHERE title LIKE '%match%'
如果你多次調(diào)用本函數(shù),那么這些條件將由 AND 連接起來(lái):
$ci->db->like('title', 'match'); $ci->db->like('body', 'match'); // WHERE title LIKE '%match%' AND body LIKE '%match%' 如果你想要控制通配符(%)所出現(xiàn)的位置,你可以使用可選的第三個(gè)參數(shù)??捎玫倪x項(xiàng)是 'before', 'after' 以及 'both' (這是默認(rèn)值)。 $ci->db->like('title', 'match', 'before'); // 生成: WHERE title LIKE '%match' $ci->db->like('title', 'match', 'after'); // 生成: WHERE title LIKE 'match%' $ci->db->like('title', 'match', 'both'); // 生成: WHERE title LIKE '%match%' 如果你不想使用百分號(hào)(%),你可以給第三個(gè)可選的參數(shù)傳遞一個(gè)'none'。 $ci->db->like('title', 'match', 'none'); // Produces: WHERE title LIKE 'match' 關(guān)聯(lián)數(shù)組方式: $array = array('title' => $match, 'page1' => $match, 'page2' => $match); $ci->db->like($array); // WHERE title LIKE '%match%' AND page1 LIKE '%match%' AND page2 LIKE '%match%' $ci->db->or_like();
本函數(shù)與上面那個(gè)函數(shù)幾乎完全相同,唯一的區(qū)別是多個(gè)實(shí)例之間是用 OR 連接起來(lái)的:
$ci->db->like('title', 'match'); $ci->db->or_like('body', $match); // WHERE title LIKE '%match%' OR body LIKE '%match%'
說(shuō)明: or_like() 曾經(jīng)被稱為 orlike(), 后者已經(jīng)過(guò)時(shí),現(xiàn)已從代碼中移除 orlike()。
$ci->db->not_like();
本函數(shù)與 like() 幾乎完全相同,唯一的區(qū)別是它生成 NOT LIKE 語(yǔ)句:
$ci->db->not_like('title', 'match'); // WHERE title NOT LIKE '%match% $ci->db->or_not_like();
本函數(shù)與 not_like() 幾乎完全相同,唯一的區(qū)別是多個(gè)實(shí)例之間是用 OR 連接起來(lái)的:
$ci->db->like('title', 'match'); $ci->db->or_not_like('body', 'match'); // WHERE title LIKE '%match%' OR body NOT LIKE '%match%' $ci->db->group_by();
允許你編寫查詢語(yǔ)句中的 GROUP BY 部分:
$ci->db->group_by("title"); // 生成: GROUP BY title
你也可以把多個(gè)值作為數(shù)組傳遞過(guò)去:
$ci->db->group_by(array("title", "date")); // 生成: GROUP BY title, date
說(shuō)明: group_by() 曾經(jīng)被稱為 groupby(), 后者已經(jīng)過(guò)時(shí),現(xiàn)已從代碼中移除 groupby()。
$ci->db->distinct();
為查詢語(yǔ)句添加 "DISTINCT" 關(guān)鍵字:
$ci->db->distinct(); $ci->db->get('table'); // 生成: SELECT DISTINCT * FROM table $ci->db->having();
允許你為你的查詢語(yǔ)句編寫 HAVING 部分。有兩種語(yǔ)法形式,一個(gè)或兩個(gè)參數(shù)都可以:
$ci->db->having('user_id = 45'); // 生成: HAVING user_id = 45 $ci->db->having('user_id', 45); // 生成: HAVING user_id = 45
你也可以把多個(gè)值通過(guò)數(shù)組傳遞過(guò)去:
$ci->db->having(array('title =' => 'My Title', 'id <'> $id));// 生成: HAVING title = 'My Title' AND id < 45<!--'-->
如果你正在使用一個(gè)由CodeIgniter進(jìn)行轉(zhuǎn)義保護(hù)的數(shù)據(jù)庫(kù),為了避免內(nèi)容轉(zhuǎn)義,你可以傳遞可選的第三個(gè)參數(shù),并將其設(shè)置為FALSE。
$ci->db->having('user_id', 45); // 生成: HAVING `user_id` = 45 (在諸如MySQL等數(shù)據(jù)庫(kù)中) $ci->db->having('user_id', 45, FALSE); // 生成: HAVING user_id = 45 $ci->db->or_having();
與 having() 函數(shù)幾乎完全一樣,唯一的區(qū)別是多個(gè)子句之間是用 "OR" 分隔的。
$ci->db->order_by();
幫助你設(shè)置一個(gè) ORDER BY 子句。第一個(gè)參數(shù)是你想要排序的字段名。第二個(gè)參數(shù)設(shè)置結(jié)果的順序,可用的選項(xiàng)包括 asc (升序)或 desc(降序), 或 random(隨機(jī))。
$ci->db->order_by("title", "desc"); // 生成: ORDER BY title DESC
你也可以在第一個(gè)參數(shù)中傳遞你自己的字符串:
$ci->db->order_by('title desc, name asc'); // 生成: ORDER BY title DESC, name ASC
或者,多次調(diào)用本函數(shù)就可以排序多個(gè)字段。
$ci->db->order_by("title", "desc"); $ci->db->order_by("name", "asc"); // 生成: ORDER BY title DESC, name ASC
說(shuō)明: order_by() 曾經(jīng)被稱為 orderby(), 后者已經(jīng)過(guò)時(shí),現(xiàn)已從代碼中移除 orderby()。
說(shuō)明: 目前 Oracle 和 MSSQL 的驅(qū)動(dòng)還不支持隨機(jī)排序,將被默認(rèn)設(shè)置為 'ASC'(升序)。
$ci->db->limit();
限制查詢所返回的結(jié)果數(shù)量:
$ci->db->limit(10); // 生成: LIMIT 10
第二個(gè)參數(shù)設(shè)置的是結(jié)果偏移量。
$ci->db->limit(10, 20); // 生成: LIMIT 20, 10 (僅限MySQL中。其它數(shù)據(jù)庫(kù)有稍微不同的語(yǔ)法) $ci->db->count_all_results();
允許你獲得某個(gè)特定的Active Record查詢所返回的結(jié)果數(shù)量??梢允褂肁ctive Record限制函數(shù),例如 where(), or_where(), like(), or_like() 等等。范例:
echo $ci->db->count_all_results('my_table'); // 生成一個(gè)整數(shù),例如 25 $ci->db->like('title', 'match'); $ci->db->from('my_table'); echo $ci->db->count_all_results(); // 生成一個(gè)整數(shù),例如 17 插入數(shù)據(jù) $ci->db->insert();
生成一條基于你所提供的數(shù)據(jù)的SQL插入字符串并執(zhí)行查詢。你可以向函數(shù)傳遞 數(shù)組 或一個(gè) 對(duì)象。下面是一個(gè)使用數(shù)組的例子:
$data = array( 'title' => 'My title' , 'name' => 'My Name' , 'date' => 'My date' ); $ci->db->insert('mytable', $data); // Produces: INSERT INTO mytable (title, name, date) VALUES ('My title', 'My name', 'My date')
第一個(gè)參數(shù)包含表名,第二個(gè)是一個(gè)包含數(shù)據(jù)的關(guān)聯(lián)數(shù)組。
下面是一個(gè)使用對(duì)象的例子:
/* class Myclass { var $title = 'My Title'; var $content = 'My Content'; var $date = 'My Date'; } */ $object = new Myclass; $ci->db->insert('mytable', $object); // Produces: INSERT INTO mytable (title, content, date) VALUES ('My Title', 'My Content', 'My Date')
第一個(gè)參數(shù)包含表名,第二個(gè)是一個(gè)對(duì)象。
注意: 所有的值已經(jīng)被自動(dòng)轉(zhuǎn)換為安全查詢。
$ci->db->insert_batch();
生成一條基于你所提供的數(shù)據(jù)的SQL插入字符串并執(zhí)行查詢。你可以向函數(shù)傳遞 數(shù)組 或一個(gè) 對(duì)象。下面是一個(gè)使用數(shù)組的例子:
$data = array( array( 'title' => 'My title' , 'name' => 'My Name' , 'date' => 'My date' ), array( 'title' => 'Another title' , 'name' => 'Another Name' , 'date' => 'Another date' ) ); $ci->db->insert_batch('mytable', $data); //生成: INSERT INTO mytable (title, name, date) VALUES ('My title', 'My name', 'My date'), ('Another title', 'Another name', 'Another date')
第一個(gè)參數(shù)包含表名,第二個(gè)是一個(gè)包含數(shù)據(jù)的關(guān)聯(lián)數(shù)組。
注意: 所有的值已經(jīng)被自動(dòng)轉(zhuǎn)換為安全查詢。
$ci->db->set();
本函數(shù)使您能夠設(shè)置inserts(插入)或updates(更新)值。
它可以用來(lái)代替那種直接傳遞數(shù)組給插入和更新函數(shù)的方式:
$ci->db->set('name', $name); $ci->db->insert('mytable'); // 生成: INSERT INTO mytable (name) VALUES ('{$name}')
如果你多次調(diào)用本函數(shù),它們會(huì)被合理地組織起來(lái),這取決于你執(zhí)行的是插入操作還是更新操作:
$ci->db->set('name', $name); $ci->db->set('title', $title); $ci->db->set('status', $status); $ci->db->insert('mytable');
set() 也接受可選的第三個(gè)參數(shù)($escape),如果此參數(shù)被設(shè)置為 FALSE,就可以阻止數(shù)據(jù)被轉(zhuǎn)義。為了說(shuō)明這種差異,這里將對(duì) 包含轉(zhuǎn)義參數(shù) 和 不包含轉(zhuǎn)義參數(shù) 這兩種情況的 set() 函數(shù)做一個(gè)說(shuō)明。
$ci->db->set('field', 'field+1', FALSE); $ci->db->insert('mytable'); // 得到 INSERT INTO mytable (field) VALUES (field+1) $ci->db->set('field', 'field+1'); $ci->db->insert('mytable'); // 得到 INSERT INTO mytable (field) VALUES ('field+1')
你也可以將一個(gè)關(guān)聯(lián)數(shù)組傳遞給本函數(shù):
$array = array('name' => $name, 'title' => $title, 'status' => $status); $ci->db->set($array); $ci->db->insert('mytable');
或者一個(gè)對(duì)象也可以:
/* class Myclass { var $title = 'My Title'; var $content = 'My Content'; var $date = 'My Date'; } */ $object = new Myclass; $ci->db->set($object); $ci->db->insert('mytable'); ///更新數(shù)據(jù) $ci->db->update();
根據(jù)你提供的數(shù)據(jù)生成并執(zhí)行一條update(更新)語(yǔ)句。你可以將一個(gè)數(shù)組或者對(duì)象傳遞給本函數(shù)。這里是一個(gè)使用數(shù)組的例子:
$data = array( 'title' => $title, 'name' => $name, 'date' => $date ); $ci->db->where('id', $id); $ci->db->update('mytable', $data); // 生成: // UPDATE mytable // SET title = '{$title}', name = '{$name}', date = '{$date}' // WHERE id = $id
或者你也可以傳遞一個(gè)對(duì)象:
/* class Myclass { var $title = 'My Title'; var $content = 'My Content'; var $date = 'My Date'; } */ $object = new Myclass; $ci->db->where('id', $id); $ci->db->update('mytable', $object); // 生成: // UPDATE mytable // SET title = '{$title}', name = '{$name}', date = '{$date}' // WHERE id = $id
說(shuō)明: 所有值都會(huì)被自動(dòng)轉(zhuǎn)義,以便生成安全的查詢。
你會(huì)注意到 $ci->db->where() 函數(shù)的用法,它允許你設(shè)置 WHERE 子句。你可以有選擇性地將這一信息直接以字符串的形式傳遞給 update 函數(shù):
$ci->db->update('mytable', $data, "id = 4");
或者是一個(gè)數(shù)組:
$ci->db->update('mytable', $data, array('id' => $id));
在進(jìn)行更新時(shí),你還可以使用上面所描述的 $ci->db->set() 函數(shù)。
$ci->db->update_batch();
生成一條update命令是以你提供的數(shù)據(jù)為基礎(chǔ)的,并執(zhí)行查詢。你可以傳遞一個(gè)數(shù)組或?qū)ο蟮膮?shù)給update_batch()函數(shù)。下面是一個(gè)使用一個(gè)數(shù)組作為參數(shù)的示例: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:
$data = array( array( 'title' => 'My title' , 'name' => 'My Name 2' , 'date' => 'My date 2' ), array( 'title' => 'Another title' , 'name' => 'Another Name 2' , 'date' => 'Another date 2' ) ); $ci->db->update_batch('mytable', $data, 'title'); // Produces: // UPDATE `mytable` SET `name` = CASE // WHEN `title` = 'My title' THEN 'My Name 2' // WHEN `title` = 'Another title' THEN 'Another Name 2' // ELSE `name` END, // `date` = CASE // WHEN `title` = 'My title' THEN 'My date 2' // WHEN `title` = 'Another title' THEN 'Another date 2' // ELSE `date` END // WHERE `title` IN ('My title','Another title')
參數(shù)1:表名 參數(shù)2:如上所示的二維數(shù)組 參數(shù)3:鍵名.
提示: 所有的值都會(huì)自動(dòng)進(jìn)行安全性過(guò)濾.
刪除數(shù)據(jù)
$ci->db->delete();
生成并執(zhí)行一條DELETE(刪除)語(yǔ)句。
$ci->db->delete('mytable', array('id' => $id)); // 生成: // DELETE FROM mytable // WHERE id = $id
第一個(gè)參數(shù)是表名,第二個(gè)參數(shù)是where子句。你可以不傳遞第二個(gè)參數(shù),使用 where() 或者 or_where() 函數(shù)來(lái)替代它:
$ci->db->where('id', $id); $ci->db->delete('mytable'); // 生成: // DELETE FROM mytable // WHERE id = $id
如果你想要從一個(gè)以上的表中刪除數(shù)據(jù),你可以將一個(gè)包含了多個(gè)表名的數(shù)組傳遞給delete()函數(shù)。
$tables = array('table1', 'table2', 'table3'); $ci->db->where('id', '5'); $ci->db->delete($tables);
如果你想要?jiǎng)h除表中的全部數(shù)據(jù),你可以使用 truncate() 函數(shù),或者 empty_table() 函數(shù)。
說(shuō)明:delete方法貌似現(xiàn)在沒(méi)有辦法接收排序參數(shù)
假設(shè)我想刪除早期的用戶登錄日志信息,我的語(yǔ)法可能會(huì)是根據(jù)登錄時(shí)間正序排列,然后跟上limit已經(jīng)有的總?cè)罩緱l數(shù)減去想保留的條數(shù),delete方法沒(méi)有這個(gè)參數(shù)用來(lái)接收,那么我只能直接使用query傳遞我的sql了
$ci->db->empty_table();
生成并執(zhí)行一條DELETE(刪除)語(yǔ)句。 $ci->db->empty_table('mytable');
// 生成 // DELETE FROM mytable $ci->db->truncate();
生成并執(zhí)行一條TRUNCATE(截?cái)?語(yǔ)句。
$ci->db->from('mytable'); $ci->db->truncate(); // 或 $ci->db->truncate('mytable'); // 生成: // TRUNCATE TABLE mytable
說(shuō)明: 如果 TRUNCATE 命令不可用,truncate() 將會(huì)以 "DELETE FROM table" 的方式執(zhí)行。
鏈?zhǔn)椒椒?/span>
鏈?zhǔn)椒椒ㄔ试S你以連接多個(gè)函數(shù)的方式簡(jiǎn)化你的語(yǔ)法??紤]一下這個(gè)范例:
$ci->db->select('title')->from('mytable')->where('id', $id)->limit(10, 20); $query = $ci->db->get();
說(shuō)明: 鏈?zhǔn)椒椒ㄖ荒茉赑HP 5下面運(yùn)行。
Active Record 緩存
盡管不是 "真正的" 緩存,Active Record 允許你將查詢的某個(gè)特定部分保存(或"緩存")起來(lái),以便在你的腳本執(zhí)行之后重用。一般情況下,當(dāng)一次Active Record調(diào)用結(jié)束,所有已存儲(chǔ)的信息都會(huì)被重置,以便下一次調(diào)用。如果開啟緩存,你就可以使信息避免被重置,方便你進(jìn)行重用。
緩存調(diào)用是累加的。如果你調(diào)用了兩次有緩存的 select(),然后再調(diào)用兩次沒(méi)有緩存的 select(),這會(huì)導(dǎo)致 select() 被調(diào)用4次。有三個(gè)可用的緩存函數(shù):
$ci->db->start_cache()
本函數(shù)必須被用來(lái)開啟緩存。所有類型正確的(下面給出了支持的查詢類型) Active Record 查詢都會(huì)被存儲(chǔ)起來(lái)供以后使用。
$ci->db->stop_cache()
本函數(shù)可以被用來(lái)停止緩存。
$ci->db->flush_cache()
本函數(shù)從Active Record 緩存中刪除全部項(xiàng)目。
這里是一個(gè)使用范例:
$ci->db->start_cache(); $ci->db->select('field1'); $ci->db->stop_cache(); $ci->db->get('tablename'); //Generates: SELECT `field1` FROM (`tablename`) $ci->db->select('field2'); $ci->db->get('tablename'); //Generates: SELECT `field1`, `field2` FROM (`tablename`) $ci->db->flush_cache(); $ci->db->select('field2'); $ci->db->get('tablename'); //Generates: SELECT `field2` FROM (`tablename`)