微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

目前,我正在使用:

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

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

关于:

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

两者都回馈相同.两者之间有什么不同吗?

在文档中确实说:注意:Laravel查询构建器始终使用PDO参数绑定来保护您的应用程序免受sql注入攻击.无需清除作为绑定传递的字符串.

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

我可以对此进行一些解释吗?

解决方法:

不,这里唯一的区别是语法.是的,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();

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐