在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中查询数据库的更好方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章