在fuelphp中查询数据库的更好方法是什么?

时间:2012-08-16 05:18:35

标签: php orm fuelphp

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

  1. 安全
  2. 灵活性
  3. 快速
  4. ,这是fuelphp中的查询功能数据库

    1. ORM (Object Relational Mapper)

    2. DB Class (Direct Query)

    3. Query Bulding

    4. 我的问题

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

      2. 当我使用Direct Query时,我的安全性有问题,因为可以使用SQL注入,但使用Direct Query我们可以自定义查询数据库&我认为速度会比ORM增加。

      3. 当我使用查询构建时,当我想加入两个或更多表时,我有问题,这个功能在fuelphp中仍然不可用,但是使用查询构建器安全性优于Direct Query&我认为速度会提高。

      4. 好的,这只是我的意见,实际上我想使用ORM,因为我比其他人更喜欢安全性,这是非常重要的。

        我的问题

        1. 你对这个问题的建议是什么?

1 个答案:

答案 0 :(得分: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()on()函数即可。例如

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

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

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

  4. 您也可以根据需要拨打on()的电话号码。

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