2016-07-31 46 views
0

我有一个关于从Request对象获取参数的问题。访问请求中的参数

是什么

$name = $request->name; 

OR

$name = $request->input("name")之间的差异;

它们显示相同的行为。我要问,从打字的角度来看,利用#1方法会更快。但我不知道区别。 #1倾向于SQL注入?

回答

2

基本上,第一种情况只是第二种语法糖。在Laravel中,Request实现__get魔术函数来访问其内部属性。

public function all() 
{ 
    return array_replace_recursive($this->input(), $this->allFiles()); 
} 

public function __get($key) 
{ 
    $all = $this->all(); 

    if (array_key_exists($key, $all)) { 
     return $all[$key]; 
    } else { 
     return $this->route($key); 
    } 
} 

在第一种情况下,如果上传了任何文件,Laravel将首先查找其中的一个属性。如果在文件或输入中没有这样的参数,那么在您的第一个片段中,Laravel还会查找路由参数中的值:

要保护您的代码免受SQL注入攻击,必须使用预准备语句/查询生成器/ ORM。你不应该逃避/改变输入,所以这两个函数都不能保护你免受SQL注入。