我需要转义数组,我正在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
请参阅并建议一种方法或其他更好的方法来执行此操作。
由于
答案 0 :(得分:3)
这里有很多解决方案。
考虑到你想坚持使用mysqli(PDO现在是推荐的方式,但仍然是一种选择)并且你想在这个上下文中继续使用array_map,你必须检查array_map原型: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);
答案 1 :(得分:2)
您需要使用匿名函数调用mysqli_real_escape_string()
调用,以便在array_map()
内使用,如下所示:
// $connection_object is a mysqli object declared somewhere above
$countries = array_map(function($item) use($connection_object) {
return mysqli_real_escape_string($connection_object, $item);
}, $_POST['countries']);