请原谅我对此事的无知,但使用Query Builders有什么意义呢?编写一行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);
这对我来说似乎更加冗长,但我再一次对Query Builders一无所知,所以我可能会遗漏一些东西。真的很想知道它有什么好处。
答案 0 :(得分:2)
如果您需要以编程方式构建查询,CodeIgniter的Active Records比纯文本更舒适,
$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);
好的,这并没有改变那么多,但如果你对where子句有10个约束怎么办?
此外,CodeIgniter的Active Record根据您传递的数据以正确的方式(使用占位符?
)构建字符串,即您不必在查询上手动插入'
。
修改强>
@col。 Shrapnel说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);
答案 1 :(得分:2)
我看不出任何好处。
达伦说,“这不是那么多”。
并且在where子句中使用10个约束AR变得更加冗长和混乱,使您完全无法掌握查询的含义。而且还没有加入!
您真正需要的唯一事情就是支持占位符 使用占位符,您的查询将变得安全且易于撰写。
答案 2 :(得分:0)
你抱怨的节目风格应该不受SQL injection attacks的限制。当然,假设您正在与之交谈的数据库界面做出合理的引用和转义。