使用mysqli转义字符串转义数组

时间:2016-03-11 13:03:26

标签: php arrays mysqli

我需要转义数组,我正在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

请参阅并建议一种方法或其他更好的方法来执行此操作。

由于

2 个答案:

答案 0 :(得分:3)

这里有很多解决方案。

考虑到你想坚持使用mysqli(PDO现在是推荐的方式,但仍然是一种选择)并且你想在这个上下文中继续使用array_map,你必须检查array_map原型:http://php.net/array_map

  

array array_map(callable $ callback,array $ array1 [,array $ ...])

所以:

  1. 使用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对象来说是一个坏主意。

  2. 使用数组可调用

    因为mysqli_real_escape_string也是mysqli的一种方法... $myArray = array_map(array($db, 'real_escape_string'), $myArray);

  3. 使用关闭

    $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']);