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

时间:2015-02-03 12:27:22

标签: php mysql laravel pdo

目前我正在使用:

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 个答案:

答案 0 :(得分:4)

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