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


what is the better way to query database in fuelphp?

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

  1. 安全
  2. 灵活性

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

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

  2. 数据库类(直接查询)

  3. 查询膨胀

我的问题

  1. 当我使用ORM映射器时,我在柔性点方面遇到了问题。我已经读过这个和这个说ORM不能按表的字段选择,ORM可以获取表中的所有列,如果连接表会传递很多数据,但是ORM是高安全性的,我现在不快或不快,也许有人可以解释,但我认为会很慢,因为ORM获取所有数据, 只是我的意见。

  2. 当我使用直接查询
  3. 时,我在安全性方面遇到了问题,因为可以SQL注入,但是使用直接查询,我们可以自定义查询数据库,我认为速度会比ORM提高。

  4. 当我使用查询构建时,我想连接两个或更多表时遇到问题,此功能在 fuelphp 中仍然不可用,但查询生成器的安全性优于直接查询,我认为速度会提高。

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

我的问题

  1. 您对此问题有何建议?
  1. ORM本质上通常会稍微慢一些,是的。但是,就像您所说的那样,灵活性可能是牺牲性能的来源。ORM有它的用途,并且对某些场景有益,这些场景在整个网络上都有更详细的记录,包括您在问题中输入的链接,因此我将留下对好处和陷阱的长篇描述。

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

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

  3. 查询
  4. 生成器适用于完成ORM模型无法完成的查询,或者编写模型是矫枉过正的查询。从中编译 SQL 会产生轻微的开销,但通常可以忽略不计。查询生成器能够联接无限数量的表。只需多次调用join()on()函数即可。例如

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

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

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

您还可以根据需要关注任意数量的on()电话。

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