Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 数组\u walk\u recursive和mysqli::real\u escape\u字符串出错_Php_Mysql - Fatal编程技术网

Php 数组\u walk\u recursive和mysqli::real\u escape\u字符串出错

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

我在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 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确实如此。我知道,但我指出语法是完全相同的,所以奇怪的是,你得到了这个错误。即便如此,我还是认为可能有什么办法可以帮上忙。