Lok*_*oko 5 php mysql pdo laravel
目前,我正在使用:
DB::select('select * from users ');
Run Code Online (Sandbox Code Playgroud)
但现在我在http://laravel.com/docs/4.2/queries上阅读
关于:
$users = DB::table('users')->get();
Run Code Online (Sandbox Code Playgroud)
两者都回馈相同。两者之间有什么不同吗?
在文档中确实指出: 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注入的侵害?第二种方法更好吗?两者都以不同的方式返回结果,对吗?
我可以对此进行一些解释吗?
不,这里唯一的区别是语法。是的,a DB::select不能防止SQL注入。但是,仅当您传递用户输入时,SQL注入才有风险。例如,这容易受到SQL注入的攻击:
DB::select('SELECT * FROM users WHERE name = "'.Input::get('name').'"');
Run Code Online (Sandbox Code Playgroud)
而这不是:
DB::table('users')->where('name', Input::get('name'))->get();
Run Code Online (Sandbox Code Playgroud)
但这还不是:(“手动”使用绑定)
DB::select('SELECT * FROM users WHERE name = ?', array(Input::get('name')));
Run Code Online (Sandbox Code Playgroud)
查询构建器的巨大优势(除了自动防止SQL注入外)是其灵活的语法。例如,您可以使用循环添加where语句:
$query = DB::table('users');
foreach($names as $name){
$query->orWhere('name', 'LIKE', $name.'%');
}
$result = $query->get();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6686 次 |
| 最近记录: |