3

私は 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
4

3 に答える 3

2

配列ではなく、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');
于 2013-01-27T22:02:13.247 に答える
1

array_walk_recursiveの定義を参照してください。

通常、funcname は 2 つのパラメーターを取ります。入力パラメーターの値が最初で、キー/インデックスが 2 番目です。

あなたが正しく指摘しているように:

実際には、mysqli::escape_string は 1 つのパラメーターのみを受け入れます。

real_escape_string()そのため、2 つのパラメーターを受け取る関数をラップします。

于 2013-01-27T21:58:18.667 に答える
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);
配列
(
    [0] => 2
    [1] => 4
    [2] => 配列
        (
            [0] => 10
            [1] => 配列
                (
                    [0] => 12
                )

        )

)
于 2013-01-27T22:49:53.490 に答える