我正在使用PHP编写一个脚本,它将为我提供一个MySQL查询,然后我将直接从MySQL Workbench中使用。
我从.csv获取数据然后循环它们以用PHP编写SQL语法。
我的问题是一种方法来转义数组中的每个字符串,以防止我得到一个损坏的查询。
如何在整个阵列上运行mysqli_real_escape?
答案 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);