DB::Table 和 DB::Select 之间的区别
Difference between DB::Table and DB::Select
目前我正在使用:
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 注入?第二种方法更好吗? return 两者的结果也不同吧?
我能得到一些解释吗?
不,这里唯一的区别是语法。是的,DB::select
不能防止 SQL 注入。但是 SQL 注入只有在您传入用户输入时才有风险。例如,这很容易受到 SQL 注入:
DB::select('SELECT * FROM users WHERE name = "'.Input::get('name').'"');
而这不是:
DB::table('users')->where('name', Input::get('name'))->get();
但这也不是:(使用绑定 "manually")
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();
目前我正在使用:
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 注入?第二种方法更好吗? return 两者的结果也不同吧?
我能得到一些解释吗?
不,这里唯一的区别是语法。是的,DB::select
不能防止 SQL 注入。但是 SQL 注入只有在您传入用户输入时才有风险。例如,这很容易受到 SQL 注入:
DB::select('SELECT * FROM users WHERE name = "'.Input::get('name').'"');
而这不是:
DB::table('users')->where('name', Input::get('name'))->get();
但这也不是:(使用绑定 "manually")
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();