Php 数组\u walk\u recursive和mysqli::real\u escape\u字符串出错
我在mysql连接中使用面向对象的风格,但如果我这样写:Php 数组\u walk\u recursive和mysqli::real\u escape\u字符串出错,php,mysql,Php,Mysql,我在mysql连接中使用面向对象的风格,但如果我这样写: array_walk_recursive($_POST, array($mysqli, 'real_escape_string')); 我得到这个错误: Warning: mysqli::real_escape_string() expects exactly 1 parameter, 2 given Fatal error: Call to a member function real_escape_string() on a no
array_walk_recursive($_POST, array($mysqli, 'real_escape_string'));
我得到这个错误:
Warning: mysqli::real_escape_string() expects exactly 1 parameter, 2 given
Fatal error: Call to a member function real_escape_string() on a non-object
事实是,mysqli::escape_string只接受一个参数:
string mysqli::escape_string ( string $escapestr )
我写道:
$VAR = array();
$VAR = $_POST;
function escape_string($item, $key) {
$arr[$key] = $mysqli->real_escape_string($item);
}
array_walk_recursive($VAR, 'escape_string');
我得到了这个错误:
Warning: mysqli::real_escape_string() expects exactly 1 parameter, 2 given
Fatal error: Call to a member function real_escape_string() on a non-object
参见的定义
通常,funcname具有两个参数。输入参数的
值为第一个,键/索引为第二个
正如你正确指出的:
事实上,mysqli::escape_字符串只接受1个参数:
因此,将
real\u escape\u string()
包装在一个具有两个参数的函数中。您需要传递一个字符串作为第二个参数,而不是数组:
function escape_string($item, $key) {
// Echo them out (using procedural mysqli)
echo mysqli_real_escape_string($item);
// or collect them in an array (using OOP mysqli)
$arr[$key] = $mysqli->real_escape_string($item);
}
array_walk_recursive($_POST, 'escape_string');
也许您需要尝试
array\u map
但是递归
function array_map_recursive($fn, $arr) {
$rarr = array();
foreach ($arr as $k => $v) {
$rarr[$k] = is_array($v)
? array_map_recursive($fn, $v)
: $fn($v); // or call_user_func($fn, $v)
}
return $rarr;
}
在这里:
或者类似的东西(与“ref”一起使用)
排列
(
[0] => 2
[1] => 4
[2] =>阵列
(
[0] => 10
[1] =>阵列
(
[0] => 12
)
)
)
在另一篇文章中,有人使用了完全相同的语法,但使用了array_walk:。我不知道你为什么会出错,但也许这篇文章会有所帮助。array\u walk不是在多维数组中递归遍历的。array\u walk\u recursive确实如此。我知道,但我指出语法是完全相同的,所以奇怪的是,你得到了这个错误。即便如此,我还是认为可能有什么办法可以帮上忙。