链接MySQL命令。原始查询

时间:2013-07-01 01:08:37

标签: php mysql codeigniter

我过去使用自己的cms /框架构建了很多网站,我开发了一种执行查询的简单方法。最近我开始玩其他框架,如代码点火器。它们提供原始查询输入,例如......

$this->db->query(“SELECT * FROM news WHERE newsId=1;”);

但他们也通过PHP方法提供MySQL命令的链接。

$this->db->select("*")->from("news")->where("newsId=?");

问题是;每个选项的主要区别和好处是什么。

我知道后面的选项会阻止MySQL注入,但说实话,你可以使用$this->db->escape()完全相同。

所以最后我可以看到后一个选项只能让你在键盘上使用更多的字母,你会认为这会减慢你的速度。

3 个答案:

答案 0 :(得分:2)

我认为codeigniter中activerecord的实现适用于小而简单的查询。 当您需要具有大量连接的复杂查询时,只需编写查询本身就更清楚了。

如果您具备SQL方面的某种技能,我认为额外的抽象层不会给您带来更好的性能。

答案 1 :(得分:1)

我不能代表CodeIgniter(坦率地说,我看到它看起来很相似),但是有几个原因可以使用这样的系统:

  • 作为支持不同DBMS后端的抽象层的一部分,例如->offset(10)->limit(10)将自动生成OFFSETLIMIT的正确变体,以及MySQL vs的类似子句PostgreSQL等
  • 作为“ORM”系统的一部分,其中查询结果根据要查询的表和列自动映射到适当类的Model对象
  • 从表格和列的确切名称中抽象出来,以实现向后兼容性或安装要求(例如,在特定安装中,“新闻”表可能实际上称为“app1_news”,以避免与其他应用程序发生冲突)
  • 处理参数化查询,如您的示例所示;尽管与这种抽象基本无关,但它们提供的不仅仅是转义,因为DBMS(MySQL或其他任何东西)知道查询的哪些部分是固定的,哪些是可变的,这对性能和安全性都很有用。

答案 2 :(得分:1)

最近的php框架开发人员使用AR(活动记录)/ DAO(数据库访问对象)模式。因为它真的比原始查询快。现在AR技术最初是从PDO(php数据对象)构建的。

为什么活跃的记录真的很惨?

真正的查询编写是开发人员的最佳习惯。但是有些问题使得它很难实现

1。当我们编写插入并更新大型查询时,有时候很难匹配每一行值..但是AR让它变得简单。你只需先添加数组然后轻松执行 2。与您使用的数据库无关 3。如果有很多条件,有时读取或写入查询真的很难。但在AR中,您可以为1个查询级联多个对象 4. AR节省您重复发言的时间