2

我有选择查询数据库的列表要求

  1. 安全
  2. 灵活性
  3. 快速地

这是fuelphp中的查询函数数据库

  1. ORM(对象关系映射器)

  2. DB 类(直接查询)

  3. 查询构建

我的问题

  1. 当我使用 ORM Mapper 时,我对灵活点有疑问。我读过这个这个说 ORM 不能按表的字段选择,ORM 可以获取表中的所有列,如果连接表将传递大量数据,但 ORM 是高安全性的,我现在不快或也许有人可以解释,但我认为会很慢,因为 ORM 获取所有数据,只是我的看法。

  2. 当我使用 Direct Query 时,我遇到了安全问题,因为可以进行 SQL 注入,但是使用 Direct Query,我们可以自定义查询数据库,我认为速度会比 ORM 提高。

  3. 当我使用查询构建时,当我想加入两个或更多表时遇到问题,这个功能在fuelphp中仍然不可用,但是查询生成器的安全性比直接查询要好,我认为速度会提高。

好吧,这只是我的看法,实际上我想使用 ORM,因为我更喜欢安全性而不是其他,我认为这非常重要。

我的问题

  1. 你对这个问题有什么建议?
4

1 回答 1

5
  1. ORM 在本质上通常会稍微慢一些,是的。但是,就像您说的那样,它的灵活性可能是牺牲性能的来源。ORM 有它的用途,并且对某些场景很有用,这些场景在整个网络上都有更详细的记录,包括您在问题中提出的链接,所以我将详细说明好处和缺陷。

  2. 直接查询可能容易受到 SQL 注入的影响,但您可以逃避它们并使它们自己安全。作为一个基本示例(如下),您可以将以下内容传递给 DB 类。在 ORM 和查询构建器无法生成您需要的 SQL 的情况下,直接查询非常有用。但是,使用直接查询意味着您不一定能够切换到不同的数据库引擎(例如 MySQL 到 Mongo),而您可以使用 ORM 或查询构建器。出于这个原因,我个人远离直接查询。

    $query = sprintf("SELECT * FROM table WHERE name = '%s'", DB::escape($yourstring));

  3. 查询构建器非常适合完成 ORM 模型无法完成的查询或编写模型过大的查询。从中编译 SQL 会有一点开销,但通常可以忽略不计。查询生成器能够连接无限数量的表。您只需要多次调用join()and函数。on()例如

    DB::select('*')->from('table')

    ->join('table2', 'right')->on('table2.column', '=', 'table.column')

    ->join('table3', 'right')->on('table3.column', '=', 'table.column')

您还可以根据需要随时拨打电话on()

如上所述,每个选项都适用于不同的场景。因此,您会发现在需要时选择最合适的选项将是您的最佳选择。

于 2012-08-16T09:46:16.993 回答