2017-08-10 72 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));