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);

这对我来说似乎更冗长,但我对查询构建器一无所知,所以我可能会遗漏一些东西。真的很想知道有什么好处。

4

3 回答 3

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);
于 2011-08-27T19:38:16.200 回答
2

我根本看不到任何好处。
Dalen 也是这么说的,“这并没有改变那么多”。而对 where 子句加上 10 个约束,AR 只会变得更加冗长和杂乱,让你完全无法掌握查询的含义。而且还没有加入!

您唯一真正需要的是对占位符的支持。
使用占位符,您的查询变得安全且易于编写。

于 2011-08-29T15:08:56.887 回答
0

您抱怨的编程风格应该不受SQL 注入攻击的影响。当然,这是假设您正在与之交谈的 DB 接口会进行合理的引用和转义。

于 2011-08-29T13:46:54.540 回答