我需要转义数组,我正在使用 array_map
和 mysqli_real_escape_string
。
我有多个数组,比如
$_post['countries'];
$_post['categories'];
.
.
我如何对这些数组执行转义
我是这样做的
$countries=array_map('mysqli_real_escape_string', $_POST['countries']);
$categories=array_map('mysqli_real_escape_string', $_POST['categories']);
.
.
但它显示错误为 Warning: mysqli_real_escape_string() expects exactly 2 parameters, 1 given in
也在做
$categories=mysqli_real_escape_string($connection, $_POST['categories']);
给出错误为
Warning: mysqli_real_escape_string() expects parameter 2 to be string, array given in
请查看并建议一种或另一种更好的方法来做到这一点。
谢谢
这里有很多解决方案。
考虑到你想坚持使用 mysqli(PDO 现在是推荐的方式,但仍然是一个选择)并且你想在这个上下文中继续使用 array_map,你必须检查 array_map 原型(prototype):http://php.net/array_map
array array_map ( callable $callback , array $array1 [, array $... ] )
所以:
使用 array_map 的动态参数
注意:这个解决方案很糟糕,而且是错误的。
原始答案:$myArray = array_map('mysqli_real_escape_string', $db, $myArray);
更新的答案:$myArray = array_map('mysqli_real_escape_string', $myArray, array_fill(0, count($myArray), $db));
这对 mysqli 对象来说是个坏主意。
使用数组调用
因为mysqli_real_escape_string也是mysqli的一个方法...
$myArray = array_map(array($db, 'real_escape_string'), $myArray);
使用闭包
$myArray = array_map(function($e) use($db) { return mysqli_escape_string($db, $e); }, $myArray);
或
$myArray = array_map(function($e) use($db) { return $db->real_escape_string($e); }, $myArray);