DB::Table 和 DB::Select 之间的区别

Posted

技术标签:

【中文标题】DB::Table 和 DB::Select 之间的区别【英文标题】:Difference between DB::Table and DB::Select 【发布时间】:2015-04-02 15:37:53 【问题描述】:

目前我正在使用:

DB::select('select * from users ');

但现在我正在阅读http://laravel.com/docs/4.2/queries

关于:

$users = DB::table('users')->get();

两者的回报相同。这两者有什么不同吗?

在文档中确实说:Note: The Laravel query builder uses PDO parameter binding throughout to protect your application against SQL injection attacks. There is no need to clean strings being passed as bindings.

对于第二种方法。这是否意味着第一种方法不能保护您免受 SQL 注入?第二种方法更好吗?两者都以不同的方式返回结果,对吧?

我能解释一下吗?

【问题讨论】:

【参考方案1】:

不,这里唯一的区别是语法。是的,DB::select 不能防止 SQL 注入。但是 SQL 注入只有在您传入用户输入时才有风险。例如,这很容易受到 SQL 注入:

DB::select('SELECT * FROM users WHERE name = "'.Input::get('name').'"');

而这不是:

DB::table('users')->where('name', Input::get('name'))->get();

但这也不是:(“手动”使用绑定)

DB::select('SELECT * FROM users WHERE name = ?', array(Input::get('name')));

查询构建器的最大优势(除了自动防止 SQL 注入)是它的灵活语法。例如,您可以使用循环添加 where 语句:

$query = DB::table('users');

foreach($names as $name)
    $query->orWhere('name', 'LIKE', $name.'%');


$result = $query->get();

【讨论】:

既然你今天回答了我所有的问题。我能问你点别的吗(不值得提出问题),但最好还是在聊天中问? 你可以邀请到chat.***.com上聊天 等等我要怎么邀请你呢? 卢卡斯?你能告诉我如何邀请你聊天吗? 转到我的个人资料 (chat.***.com/users/1903366/lukasgeiter) 并点击“与该用户开始一个房间”(或类似的东西)

以上是关于DB::Table 和 DB::Select 之间的区别的主要内容,如果未能解决你的问题,请参考以下文章

如何在 DB::select(query) 上使用分页 - Laravel

DB::table('table') 和 model::('table') 的区别

Laravel DB::insert() 和 DB::table()->insert() 的区别

如何在卸载作业中为分隔符编写 DB2 SELECT 语句

带有 DB::table 的 laravel 加载函数

如何在具有子查询的以下查询中不使用 DB