搜尋
首頁php教程PHP开发CodeIgniter學習筆記 Item5--CI中的AR

AR(Active Record)

在啟用AR的情況下(CI3.0預設已經啟動並且沒有配置項),透過

$this->db


的get方法可以獲得一張表的結果集

[code]// AR会自动加上表前缀,因此get方法中的表名不用加上表前缀
$res = $this->db->get('user');
foreach ($res->result() as $item)
{
    echo $item->name . "
"; }


方法可以簡單的插入一筆記錄,參數是表名和關聯數組

[code]$data = array('name'=>'mary', 'password'=>md5('mary'));
$result = $this->db->insert('user', $data);


透過update方法修改記錄,第一個參數是表明,第二個參數是修改後的內容,用關聯數組表示,第三個參數是查詢條件

[code]$data = array ('email'=>'mary@gmail.com', 'password'=>md5('123456'));
$this->db->update('user', $data, array('name'=>'mary'));


透過delete方法刪除一筆記錄,參數一是表名,參數二是查詢條件

[code]$this->db->delete('user', array('name'=>'mary'));




連貫操作,對於比較複雜的SQL使用AR提供的連貫操作進行查詢

[code]$result = $this->db->select('id, name')
            ->from('user')
            ->where('id >=', 1)
            ->limit(3,1)
            ->order_by('id desc ')
            ->get();


注意:limit的參數順序與SQL中的順序是相反的,第一個參數表示顯示的條數,第二個參數表示跳過的條數

不同查詢條件下where語句的寫法

[code]where('name', 'mary')或where('name =', 'mary'):表示查询条件是name字段值是mary
where(array('name'=>'mary', 'id >'=>'1'));:表示查询条件有两个,name字段值是mary并且id字段值是1

透過last_query()方法可以獲得透過連貫操作,由AR拼裝的SQL語句

[code]$this->db->last_query();

透過AR只能執行比較簡單的查詢,如果是比較簡單的查詢,建議使用$this->db->query($sql, $data)
進行查詢

選擇資料 

下面的函數來幫助你建立SQL SELECT語句。

備註:如果你正在使用 PHP5,你可以在複雜情況下使用鍊式語法。本頁面底部有具體描述。

[code]$this->db->get();

運行選擇查詢語句並且傳回結果集。可以取得一個表格的全部資料。

[code]$query = $this->db->get('mytable');
// Produces: SELECT * FROM mytable

第二和第三個參數允許你設定一個結果集每頁紀錄數(limit)和結果集的偏移(offset)

[code]$query = $this->db->get('mytable', 10, 20);
// Produces: SELECT * FROM mytable LIMIT 20, 10 (in MySQL. Other databases have slightly different syntax)


注意:第二參數是每頁紀錄數,第三個參數是偏移

你會注意到上面的函數由一個變數$query
執行,這個$query
可以用來顯示結果集。

[code]$query = $this->db->get('mytable');
foreach ($query->result() as $row)
{
    echo $row->title;
}
[code]$this->db->get_where();


跟上面的函數一樣,只是它允許你在函數的第二個參數那裡添加一個where 從句,從而不用使用db->where() 這個函數:

[code]$query = $this->db->get_where('mytable', array('id' => $id), $limit, $offset);

注意: get_where: get_where在先前的版本中寫作getwhere(),這是已經過時的用法,現在已從程式碼中移除getwhere()。

[code]$this->db->select();

允許你在SQL查詢中寫 SELECT 部分:

[code]$this->db->select('title, content, date');
$query = $this->db->get('mytable');
// Produces: SELECT title, content, date FROM mytable

注意: 如果你要查詢表中的所有行,你可以不用寫這個函數。省略後,CodeIgniter 會認為你要查詢全部行(SELECT *)。

$this->db->select()
[code]$this->db->select('(SELECT SUM(payments.amount) FROM payments WHERE payments.invoice_id=4') AS amount_paid', FALSE); 
$query = $this->db->get('mytable');

關聯數組方式: 

[code]$array = array('title' => $match, 'page1' => $match, 'page2' => $match);
$this->db->like($array); 
// WHERE title LIKE '%match%' AND page1 LIKE '%match%' AND page2 LIKE '%match%'
$this->db->or_like();

本函數與上面那個函數幾乎完全相同,唯一的區別是多個實例之間是用OR 連接起來的:

) 曾經被稱為orlike(), 後者已經過時,現已從程式碼移除orlike()。



[code]$this->db->like('title', 'match');
$this->db->or_like('body', $match); 
// WHERE title LIKE '%match%' OR body LIKE '%match%'

本函數與like() 幾乎完全相同,唯一的區別是它產生NOT LIKE 語句:


[code]$this->db->not_like();

本函數與not_like() 幾乎完全相同,唯一的區別是多個實例之間是多個實例之間是用OR 連接起來的:


[code]$this->db->not_like('title', 'match');
// WHERE title NOT LIKE '%match%
$this->db->or_not_like();

允許你寫查詢語句中的GROUP BY 部分:



[code]$this->db->like('title', 'match');
$this->db->or_not_like('body', 'match'); 
// WHERE title LIKE '%match%' OR body NOT LIKE '%match%'
$this->db->group_by();

你也可以把多個值作為陣列曾經被稱為groupby(), 後者已經過時,現已從程式碼移除groupby()。


[code]$this->db->group_by("title"); 
// 生成: GROUP BY title

為查詢語句加上 「DISTINCT」 關鍵字:


[code]$this->db->group_by(array("title", "date")); 
// 生成: GROUP BY title, date

允許你為你的查詢語句寫 HAVING 部分。有兩種語法形式,一個或兩個參數都可以:



[code]$this->db->distinct();

如果你正在使用一個由CodeIgniter進行轉義保護的資料庫,為了避免內容轉義,你可以傳遞可選的第三個參數,並將其設定為FALSE。


[code]$this->db->distinct();
$this->db->get('table');
// 生成: SELECT DISTINCT * FROM table
$this->db->having();

與 having() 函數幾乎完全一樣,唯一的區別是多個子句之間是用 “OR” 分隔的。



[code]$this->db->having('user_id = 45'); 
// 生成: HAVING user_id = 45
$this->db->having('user_id', 45); 
// 生成: HAVING user_id = 45
你也可以把多个值通过数组传递过去:
[code]$this->db->having(array('title =' => 'My Title', 'id <' => $id)); 
// 生成: HAVING title = 'My Title', id < 45

幫助你設定一個 ORDER BY 子句。第一個參數是你想要排序的欄位名稱。第二個參數設定結果的順序,可用的選項包括 asc (升序)或 desc(降序), 或 random(隨機)。


[code]$this->db->having('user_id', 45); 
// 生成: HAVING `user_id` = 45 (在诸如MySQL等数据库中) 
$this->db->having('user_id', 45, FALSE); 
// 生成: HAVING user_id = 45
$this->db->or_having();

你也可以在第一個參數中傳遞你自己的字串:


[code]$this->db->order_by();

或者,多次呼叫本函數就可以排序多個欄位。


[code]$this->db->order_by("title", "desc"); 
// 生成: ORDER BY title DESC

說明: order_by() 曾經被稱為 orderby(), 後者已經過時,現已從程式碼中移除 orderby()。


說明: 目前 Oracle 和 MSSQL 的驅動程式還不支援隨機排序,將被預設為 ‘ASC’(升序)。

[code]$this->db->order_by('title desc, name asc'); 
// 生成: ORDER BY title DESC, name ASC

限制查詢所回傳的結果數量:


[code]$this->db->order_by("title", "desc");
$this->db->order_by("name", "asc"); 
// 生成: ORDER BY title DESC, name ASC

第二個參數設定的是結果偏移量。


[code]$this->db->limit(10, 20);
// 生成: LIMIT 20, 10 (仅限MySQL中。其它数据库有稍微不同的语法)
$this->db->count_all_results();

允许你获得某个特定的Active Record查询所返回的结果数量。可以使用Active Record限制函数,例如 where(),or_where()
, like(), or_like() 等等。范例:

[code]echo $this->db->count_all_results('my_table');
// 生成一个整数,例如 25
$this->db->like('title', 'match');
$this->db->from('my_table');
echo $this->db->count_all_results();
// 生成一个整数,例如 17

插入数据

[code]$this->db->insert();


生成一条基于你所提供的数据的SQL插入字符串并执行查询。你可以向函数传递 数组 或一个 对象。下面是一个使用数组的例子:

[code]$data = array(
               'title' => 'My title' ,
               'name' => 'My Name' ,
               'date' => 'My date'
            );
$this->db->insert('mytable', $data); 
// Produces: INSERT INTO mytable (title, name, date) VALUES ('My title', 'My name', 'My date')

第一个参数包含表名,第二个是一个包含数据的关联数组。

下面是一个使用对象的例子:

[code]/*
    class Myclass {
        var $title = 'My Title';
        var $content = 'My Content';
        var $date = 'My Date';
    }
*/
$object = new Myclass;
$this->db->insert('mytable', $object); 
// Produces: INSERT INTO mytable (title, content, date) VALUES ('My Title', 'My Content', 'My Date')


第一个参数包含表名,第二个是一个对象。(原文有错:The first parameter will contain the table name, the second is an associative array of values.)

注意: 所有的值已经被自动转换为安全查询。

[code]$this->db->set();

本函数使您能够设置inserts(插入)或updates(更新)值。

它可以用来代替那种直接传递数组给插入和更新函数的方式: 

[code]$this->db->set('name', $name); 
$this->db->insert('mytable'); 
// 生成: INSERT INTO mytable (name) VALUES ('{$name}')

如果你多次调用本函数,它们会被合理地组织起来,这取决于你执行的是插入操作还是更新操作:

[code]$this->db->set('name', $name);
$this->db->set('title', $title);
$this->db->set('status', $status);
$this->db->insert('mytable');


set() 也接受可选的第三个参数($escape),如果此参数被设置为 FALSE,就可以阻止数据被转义。为了说明这种差异,这里将对 包含转义参数 和 不包含转义参数 这两种情况的 set() 函数做一个说明。

[code]$this->db->set('field', 'field+1', FALSE);
$this->db->insert('mytable'); 
// 得到 INSERT INTO mytable (field) VALUES (field+1)
$this->db->set('field', 'field+1');
$this->db->insert('mytable'); 
// 得到 INSERT INTO mytable (field) VALUES ('field+1')

你也可以将一个关联数组传递给本函数:

[code]$array = array('name' => $name, 'title' => $title, 'status' => $status);
$this->db->set($array);
$this->db->insert('mytable');

或者一个对象也可以:

[code]/*
    class Myclass {
        var $title = 'My Title';
        var $content = 'My Content';
        var $date = 'My Date';
    }
*/
$object = new Myclass;
$this->db->set($object);
$this->db->insert('mytable');

更新数据

[code]$this->db->update();

根据你提供的数据生成并执行一条update(更新)语句。你可以将一个数组或者对象传递给本函数。这里是一个使用数组的例子:

[code]$data = array(
               'title' => $title,
               'name' => $name,
               'date' => $date
            );
$this->db->where('id', $id);
$this->db->update('mytable', $data); 
// 生成:
// UPDATE mytable 
// SET title = '{$title}', name = '{$name}', date = '{$date}'
// WHERE id = $id

或者你也可以传递一个对象:

[code]/*
    class Myclass {
        var $title = 'My Title';
        var $content = 'My Content';
        var $date = 'My Date';
    }
*/
$object = new Myclass;
$this->db->where('id', $id);
$this->db->update('mytable', $object); 
// 生成:
// UPDATE mytable 
// SET title = '{$title}', name = '{$name}', date = '{$date}'
// WHERE id = $id

说明: 所有值都会被自动转义,以便生成安全的查询。

你会注意到

$this->db->where()
[code]$this->db->update('mytable', $data, "id = 4");

或者是一个数组:

[code]$this->db->update('mytable', $data, array('id' => $id));


在进行更新时,你还可以使用上面所描述的 $this->db->set() 函数。

删除数据

[code]$this->db->delete();

生成并执行一条DELETE(删除)语句。

[code]$this->db->delete('mytable', array('id' => $id)); 
// 生成:
// DELETE FROM mytable 
// WHERE id = $id

第一个参数是表名,第二个参数是where子句。你可以不传递第二个参数,使用 where() 或者 or_where() 函数来替代它:

[code]$this->db->where('id', $id);
$this->db->delete('mytable'); 
// 生成:
// DELETE FROM mytable 
// WHERE id = $id


如果你想要从一个以上的表中删除数据,你可以将一个包含了多个表名的数组传递给delete()函数。

[code]$tables = array('table1', 'table2', 'table3');
$this->db->where('id', '5');
$this->db->delete($tables);

如果你想要删除表中的全部数据,你可以使用 truncate() 函数,或者 empty_table() 函数。

[code]$this->db->empty_table();

生成并执行一条DELETE(删除)语句。

[code] $this->db->empty_table('mytable'); 
// 生成
// DELETE FROM mytable
$this->db->truncate();


生成并执行一条TRUNCATE(截断)语句。

[code]$this->db->from('mytable'); 
$this->db->truncate(); 
// 或 
$this->db->truncate('mytable'); 
// 生成:
// TRUNCATE mytable

说明: 如果 TRUNCATE 命令不可用,truncate() 将会以 “DELETE FROM table” 的方式执行。

链式方法 

链式方法允许你以连接多个函数的方式简化你的语法。考虑一下这个范例:

[code]$this->db->select('title')->from('mytable')->where('id', $id)->limit(10, 20);
$query = $this->db->get();

 以上就是CodeIgniter学习笔记 Item5--CI中的AR的内容,更多相关内容请关注PHP中文网(www.php.cn)!


陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。