2017-08-10 73 views
-1

我想從我從git中複製的奇怪函數中讀取變量。無法讀取函數中的變量

這是原來的功能:

$values = array_map(function ($value) use ($connection) { 
    if ($value===null) return null; 
// return mysqli_real_escape_string($connection,(string)$value); 
    return pg_escape_string($connection,(string)$value); 
},array_values($input)); 

,我把它改爲這個以使其適應我的需要(文件上傳)

$values = array_map(function ($value) use ($connection) { 
    if ($value === null) 
     return null; 
    if (gettype($value) === "array"){ 

     $tmpname=$value['tmp_name']; 

     $value=$value['name']; 

    } 
    return mysqli_real_escape_string($connection, (string) $value); 
}, array_values($input)); 

的問題是,我不能從該函數外部讀取$tmpname
任何人都可以幫助我嗎?

+0

http://php.net/manual/en/language.variables.scope.php – rtfm

+1

你的腳本是在風險[SQL注入攻擊](http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php) 即使[如果你正在逃避投入,它不安全!]( http://stackoverflow.com/questions/5741187/sql-injection-that-gets-around-mysql-real-escape-string) 使用[prepared參數化語句](http://php.net/manual/en/ mysqli.quickstart.prepared-statements.php) – RiggsFolly

+0

@RiggsFolly反正有沒有使用param來保護它eterized語句? –

回答

0

所以答案爲@rtfm說是設置一個全局變量這樣

$values = array_map(function ($value) use ($connection) { 
    if ($value === null) 
     return null; 
    if (gettype($value) === "array"){ 

     global $tmpname; 
     $tmpname=$value['tmp_name']; 
     $value=$value['name']; 
    } 
    return mysqli_real_escape_string($connection, (string) $value); 
}, array_values($input));