走完「查詢」與「新增」之後,CI教學手冊表示:
現在你已經完成了這個教學,我們建議你看一看手冊的其它部份。CodeIgniter 常常因為擁有完整的文件而被稱讚。?你可以好好的利用這個優勢,完整的閱讀"簡介"與"一般主題"。 當有需要時,你也應該閱讀類別參考與補助函式參考。
任何一個中階的 PHP 開發者應該都能夠在幾天內掌握使用 CodeIgniter 的訣竅。
所以,我完成一個里程碑了!好棒棒~才怪!沒有把「新刪修三部曲」都練一次我心裡不踏實(個人問題)。在開始剩下的二部曲之前,必須要先跟CI的資料庫使用方法培養感情,所以這篇會介紹Active Record的使用!
本來這篇想要把三部曲兼查詢一次一網打盡,打到一半發現查詢要講的東西超級多,總不能都提到了查詢卻草草帶過,好吧,我只好拆篇了,絕對沒有拖台錢(X)
以下範例全部參考User Guide,會加上我的理解,當然,想要自己看手冊的朋友,可以點傳送門自己研究XD。
一般查詢單一Table時會下的Query語法不外乎是SELECT * FROM XXX,在這裡,CI幫你簡化成只要輸入Table就可以了!代碼如下:
$query = $this->db->get('mytable');
// 產生: SELECT * FROM mytable
在Query語法後面設置limit控制資料數量:
$query = $this->db->get('mytable', 10, 20);
// 產生: SELECT * FROM mytable LIMIT 20, 10 (使用MySQL。其它資料庫有不太一樣的語法。)
將結果從$query取出(result我們跳到後面說):
$query = $this->db->get('mytable');
foreach ($query->result() as $row)
{
echo $row->title;
}
最常用除了全部查詢外還有指定篩選條件的查詢方法,例如「我要找學號為D123555的學生」,這時候該怎麼做呢?
$query = $this->db->get_where('mytable', array('id' => $id), $limit, $offset);
不詳其姓字,宅邊也沒有五柳樹,所以到底是誰?他是——負責將$query的結果以某種型態抓出來。
那,到底可以呈現的結果有哪些?單筆、多筆、數字、陣列、物件?沒錯,把拔買給你(這筆者廢話好多)
result(): 將結果回傳一個陣列物件(objects),失敗時回傳空陣列,別名result_object()。
result_array(): 將結果回傳一個陣列資料,失敗時回傳空陣列。
row(): 回傳單筆物件(object)資料,查詢的資料超過一筆,只會回傳第一筆資料。
row_array(): 回傳單筆陣列(array)資料,查詢的資料超過一筆,只會回傳第一筆資料。
$query->num_fields(): 回傳查詢結果所產生的欄位行數。
$query->free_result(): 釋放查詢結果所產生的記憶體,以及刪除物件變數ID。
這部分「初學者」可能需要理解一下:
一般做兩個查詢來說,查完的結果會放在$query及$query2,我們再分別依照需求去排版或者整理資料。這裡的free_result()的意思就是~「清掉」,也就是當你清完,後面的$query與$query2就等於不存在了。
引用user guide的解釋:
基本上PHP會在程式全部執行完成後自動釋放記憶體。 然而,假如您在單一PHP檔案執行了多個查詢,就必須要釋放每>一次查詢所消耗的記憶體空間。
查詢結果在用完後沒有清掉~就會留在記憶體裡!太多的話可是會對伺服器造成影響的!
$query = $this->db->query('SELECT title FROM my_table');
foreach ($query->result() as $row)
{
echo $row->title;
}
$query->free_result(); // $query 物件將不再使用了
$query2 = $this->db->query('SELECT name FROM some_table');
$row = $query2->row();
echo $row->name;
$query2->free_result(); // $query2 物件將不再使用了
下一篇會深入介紹Select()的其他家族用法,以及Where()的深入用法,雖說學東西求懂不求快,但~還是希望能控制在兩篇內把查詢給解決,以免學習進度與烏龜無異,我們一起加油吧!