2011-08-27 49 views
2

請原諒我對此事的無知,但使用查詢構建器有什麼意義?是不是更簡潔寫SQL的一條線,而不是3行代碼AR:使用查詢構建器有什麼好處

$this->db->query(" SELECT title, contents FROM data WHERE id = 2 "); 

相反的:

$this->db->select('title, contents'); 
$this->db->from('data'); 
$this->db->where('id', 2); 

它只是似乎更詳細的給我,但我還是那句話知道查詢構建器一無所有,所以我可能會錯過一些東西。真的很想知道它的好處是什麼。

+0

來自不知道甚至是什麼活動記錄的人,似乎第二種方法引入了更少的錯誤,因爲它不僅僅是一個大字符串。我個人喜歡閱讀第二種方法。 – DMan

+1

請注意,這是**不是** ActiveRecord。 CI們誤稱它。看到我的答案在這裏:http://stackoverflow.com/questions/2480929/is-codeigniters-activerecord-resource-intensive/2480944#2480944 - 所以這個問題應該真的是:使用QueryBuilder的好處是什麼? – Gordon

+0

閱讀說明書。 AR不僅僅需要輸入多少內容。 http://codeigniter.com/user_guide/database/active_record.html – Peter

回答

2

如果您需要以編程方式構建查詢CodeIgniter的活動記錄遠比純文本更加舒適,

$id = 2; 

//with CodeIgniter's Active Record 
$this->db->select('title, contents'); 
$this->db->from('data'); 
if(isset($id)) 
    $this->db->where('id', $id); 

//without CodeIgniter's Active Record 
if(isset($id)) 
    $where = " WHERE id = {$id}"; 
$this->db->query(" SELECT title, contents FROM data".$where); 

好吧,這是不會改變那麼多,但如果你對其中第10點的限制?

此外,CodeIgniter的活動記錄根據您傳遞的數據以正確的方式構建字符串(使用佔位符?),即您不必在查詢中手動插入'

編輯

@col。彈片說,與CodeIgniter的Active Record的任何好處,因爲我不同意他的觀點我嘗試執行我的論文與另外一個例子:

讓我們做一個例子INSERT語句:

$array = array('A'=>'aaaa','B'=>'bbbb','C'=>'cccc'); 

//without CodeIgniter's Active Record 
$query = "INSERT INTO my_table ("; 
$query.= implode(',',array_keys($array)) .')'; 
$query.= ...... 

//with CodeIgniter's Active Record 
$this->db->insert('my_table',$array); 
+0

我現在所做的事似乎沒有必要,但我讀了一些關於Active Records的其他SO問題,從長遠來看它似乎很有價值。 – Linda

+0

@Linda如果你不需要*動態*組裝查詢,使用QueryBuilder幾乎沒有什麼好處。你也可以使用像PDO這樣的抽象層。 – Gordon

+0

如果有這樣的幫手,我會同意一個好的程序員會爲這樣一個重複的任務創建一個。無論如何,選擇它只會讓他們難以閱讀。 –

0

您抱怨的編程風格應該不受SQL injection attacks的影響。這是假設您正在與之交談的數據庫接口當然會進行明智的引用和轉義。

2

我沒有看到任何好處。 Dalen也說過,「這並不是那麼厲害」。 而對where子句AR有10個約束則變得更加粗魯和混亂,使你完全無法理解查詢的含義。而且還沒有加入!

您真正需要的唯一東西就是對佔位符的支持。
使用佔位符,您的查詢變得安全且易於撰寫。

+0

實際佔位符也可用於$ this-> db->查詢,因此不需要AR來使用它們。 – Dalen