4

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

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

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

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

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

我知道后一个选项可以防止 MySQL 注入,但老实说,您可以使用$this->db->escape().

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

4

3 回答 3

2

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

如果您有一定的 SQL 技能,我认为额外的抽象层不会给您带来更好的性能。

于 2013-07-01T09:00:57.120 回答
1

我不能代表 CodeIgniter(坦率地说,我所看到的似乎相当混乱),但是可以使用这样的系统有几个原因:

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

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

为什么主动记录真的更快?

它真正的查询编写是开发人员的最佳习惯。但有些问题让它变得艰难

1.当我们编写插入和更新大查询时,有时很难匹配每一行值.. 但 AR 让它变得容易。您只需先添加数组,然后轻松执行。
2.不管你使用什么数据库。
3.条件多的情况下,有时很难读或写查询。但在 AR 中,您可以为 1 个查询级联多个对象。
4. AR 节省您重复陈述的时间

于 2013-07-01T02:58:17.190 回答