这是否允许mysql_real_escape_string全局工作?


Will this allow for mysql_real_escape_string to work globally?

$_POST = mysql_real_escape_string($_POST);
通过执行这个语句,每个post值现在通过mysql_real_escape_string转义吗?

No。这根本不起作用:$_POST是一个数组:mysql_real_escape_string需要一个字符串作为它的第一个参数。但是,您可以使用array_map:

实现您想要的效果。
$_POST = array_map('mysql_real_escape_string', $_POST);

array_walk_recursive作为array_map不工作的数组post值:

array_walk_recursive($_POST, function(&$v, $k) {$v = mysql_real_escape_string($v);});
然而,更好的方法是使用参数化查询:这是迄今为止避免SQL注入最安全的方法。上面的选项不仅做了不必要的转义(例如,$_POST数组的成员不需要插入到数据库中),它还使在其他上下文中使用数据变得更加困难,例如以某种方式将它们返回给浏览器。

不,但你可以使用array_walk() Docsarray_walk_recursive() Docs来实现这一点,因为mysql_real_escape_string() Docs需要一个字符串(去图…)作为输入,而你传递的是一个数组。这样,您可以向每个数组元素传递相同的回调函数:

array_walk_recursive($_POST, 'escape');
escape($k,$v)
{
 return mysql_real_escape_string($v);
}

但是最好相应地处理每个值,例如将INT型转换为INT型等,或者更好的是,使用参数化查询

因为$_POST是一个数组,这将会给你一个错误。

链接:http://php.net/manual/en/function.mysql-real-escape-string.php

$escapedPost = array_map(array($this, 'recursive_escape'), $_POST);

/**
 * recursively escape an array containing strings and/or arrays
 */
function recursive_escape($value) {
    if (is_array($value)) {
        array_map(array($this, 'recursive_escape'), $value);
    } else {
        $value = mysql_real_escape_string($value);
    }
    return $value;
}