$_POST = mysql_real_escape_string($_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()
Docs或array_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;
}