$this->db->query()和$this->db->select()在codeigniter中的区别是什么?


Whats the difference between $this->db->query() and $this->db->select() in codeigniter

在CodeIgniter中,在$this->db->query()$this->db->select()中,我们可以从表中选择行。谁能简单总结一下两者的区别?

我们可以使用$this->db->query()运行任何查询。那么$this->db->select()有什么用?我们为什么需要它?

根本不知道CodeIgniter,这个名字就暴露了一切。使用$this->db->select()可以构建并执行SELECT查询。如果有类似的方法,比如$this->db->update()$this->db->delete(),那就有意义了。

$this->db->query看起来像是适合自定义查询(当它可用时,您不应该这样做)

编辑:

查看文档,现在很清楚,$this->db->select方法是查询构建和链接的一个组成部分,在那里你可以使用一个聪明的系统来选择你的数据,而不需要知道任何SQL,在那里你实际上必须使用$this->db->query

来逃避和构建你的查询

$this->db->select()只是构建查询的一部分;它属于活动记录类,事实上,单独使用它是没有意义的,因为它只是创建"SELECT field,field1,field3"部分,没有别的。
您需要所有其他部分来构建完整的查询,并调用->get()方法,并在此基础上检索结果。

$this->db->query()只是一个函数助手,它使您运行您作为参数传递的查询。

重要的区别:活动记录自动转义查询,而$this->db->query()没有,所以你应该调用$this->db->escape()对个别变量或使用占位符运行:

$sql = "INSERT INTO table (field1,field2) VALUES (?,?)";
$query = $this->db->query($sql,array('asd','lol'));

使用$this->db->select()可以简化编写查询。您总是可以手动编写查询并使用$this->db->query()执行它,但这将是一项繁琐的任务。相反,你可以使用活动记录类,它会为你做这件事。另外,它还可以帮你进行转义。当您使用活动记录时,当您告诉CodeIgniter使用$this->db->get()之类的东西获取数据时,它最终将使用$this->db->query()执行查询。

请参阅本页的前两段,了解使用活动记录的其他好处http://codeigniter.com/user_guide/database/active_record.html

我认为

$this->db->query('YOUR QUERY HERE');

可以指定完整的查询,并使用

$this->db->select()

是ActiveRecord的一部分你指定要选择的字段