2016-07-31 45 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注入。