我有一个关于从Request对象获取参数的问题。
之间有什么区别
$name = $request->name;
OR
$name = $request->input("name")
;
他们表现出相同的行为。我要求从打字的角度来看,利用#1方法更快。但我不知道其中的区别。 #1是否容易进行SQL注入?
答案 0 :(得分:2)
基本上,第一种情况只是第二种情况的语法糖。在Laravel中,Request实现了__get magic函数来访问其内部属性。
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注入。