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

Posted

技术标签:

【中文标题】在fuelphp中查询数据库的更好方法是啥?【英文标题】:what is the better way to query database in fuelphp?在fuelphp中查询数据库的更好方法是什么? 【发布时间】:2012-08-16 05:18:35 【问题描述】:

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

    安全性 灵活性 快速

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

    ORM (Object Relational Mapper)

    DB Class (Direct Query)

    Query Bulding

我的问题

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

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

    李>

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

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

我的问题

    您对此问题有何建议?

【问题讨论】:

【参考方案1】:

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

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

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

    查询构建器非常适合完成 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()

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

【讨论】:

以上是关于在fuelphp中查询数据库的更好方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

FuelPhp 关系查询作为单一结果

在 NHibernate 查询中实现条件的更好方法是啥?

Fuelphp ORM添加到模型属性时出现意外结果

卡桑德拉还是 SOLR?是啥为前端读取查询提供了更好的性能?

FuelPHP的orm和mysql不区分大小写`like`

编写此查询的更好/更有效的方法