2011-08-27 23 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