我为我的mysql连接使用面向对象的样式,但如果我写这个:
array_walk_recursive($_POST, array($mysqli, 'real_escape_string'));
我收到此错误:
Warning: mysqli::real_escape_string() expects exactly 1 parameter, 2 given
事实是 mysqli :: escape_string 接受仅1个参数:
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');
我收到了这个错误:
Fatal error: Call to a member function real_escape_string() on a non-object
答案 0 :(得分:2)
您需要传递一个字符串作为第二个参数,而不是数组:
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');
答案 1 :(得分:1)
请参阅array_walk_recursive的定义。
通常,funcname采用两个参数。输入参数 值是第一个,键/索引第二个。
正如你正确指出的那样:
事实是mysqli :: escape_string只接受1个参数:
所以将real_escape_string()
包装在一个带有两个参数的函数中。
答案 2 :(得分:0)
也许您需要尝试array_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;
}
此处:http://php.net/manual/en/function.array-map.php#107808
或类似的东西(使用“ref”);
function array_map_recursive2($fn, &$arr) {
foreach ($arr as $k => $v) {
$arr[$k] = is_array($v)
? array_map_recursive2($fn, $v)
: $fn($v);
}
return $arr;
}
$a = array(1,2,array(5,array(6)));
array_map_recursive2(function($v){
return $v * 2;
}, $a);
print_r($a);
Array ( [0] => 2 [1] => 4 [2] => Array ( [0] => 10 [1] => Array ( [0] => 12 ) ) )