我有选择查询数据库的列表要求
这是fuelphp中的查询功能数据库
我的问题
当我使用ORM Mapper时,我对灵活点有疑问.我已经读过这个,这说ORM不能通过表的字段选择,ORM可以获取表中的所有列,如果连接表将传递大量数据,但ORM是高安全性我现在不快或也许有些人可以解释,但我认为这将是缓慢的,因为ORM获取所有数据,只是我的意见.
当我使用Direct Query时,我的安全性有问题,因为可以使用SQL注入,但使用Direct Query我们可以自定义查询数据库,我认为速度会比ORM增加.
当我使用查询构建时我有问题,当我想加入两个或更多的表时,这个功能仍然在fuelphp中不可用,但是使用查询构建器安全性比直接查询更好,我认为速度会增加.
好的,这只是我的意见,实际上我想使用ORM因为我比其他人更喜欢安全性,这是非常重要的我认为.
我的问题
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().
如上所述,每个选项将适合不同的场景.因此,您会发现在您需要时选择最合适的选项将是您的最佳选择.
| 归档时间: |
|
| 查看次数: |
2830 次 |
| 最近记录: |