逃离DB整个数组

时间:2013-11-28 15:42:02

标签: php mysql arrays

我正在使用PHP编写一个脚本,它将为我提供一个MySQL查询,然后我将直接从MySQL Workbench中使用。

我从.csv获取数据然后循环它们以用PHP编写SQL语法。

我的问题是一种方法来转义数组中的每个字符串,以防止我得到一个损坏的查询。

如何在整个阵列上运行mysqli_real_escape?

2 个答案:

答案 0 :(得分:3)

首先,尝试使用PDO。使用预处理语句,您的变量将与查询分开发送,您无需担心手动转义参数。

其次,如果您真的需要这样做,请将mysqli_real_escape_string与数组映射一起使用。这样的事情应该有效

$escapedArray = array_map(function($val) use ($mysqli) {
        return is_string($val) ? $mysqli->real_escape_string($val) : $val;
}, $unescapedArray);

或者在程序上像这样

$escapedArray = array_map(function($val) use ($mysqli) {
        return is_string($val) ? mysqli_real_escape_string($mysqli, $val) : $val;
}, $unescapedArray);

原因很简单。如果数组的任何元素不是字符串,则转义它将返回null,因此您按原样返回该元素。

编辑:对于嵌套数组,您必须使用array_walk_recursive,而不是array_map

array_walk_recursive($varArray, function(&$val) use($mysqli) {
    $val = !is_string($val) ?: mysqli_real_Escape_string($mysqli, $val);
});

答案 1 :(得分:2)

您可以使用array_map。类似的东西:

$safeArray = array_map ('mysqli_real_escape_string', $originalArray);