array_map show mysql_real_escape_string()期望参数1

diE*_*cho 3 php arrays

可能重复:
mysql_fetch_array()期望参数1是资源,在select中给出boolean

当我使用

array_map('mysql_real_escape_string', $_POST);

it display

    Warning: mysql_real_escape_string() expects parameter 1 to be string, array given in D:\xampp\htdocs\...\...\xyz.php on line 14
Run Code Online (Sandbox Code Playgroud)

之后是什么原因?

编辑: 如果我使用

array_walk_recursive($_POST, 'mysql_real_escape_string');
Run Code Online (Sandbox Code Playgroud)

然后它显示

Warning: mysql_real_escape_string() expects parameter 2 to be resource, integer given in D:\xampp\htdocs\..\...\xyz.php on line 17
Run Code Online (Sandbox Code Playgroud)

还请告诉我上述两种方法的区别?先感谢您

Dan*_*oap 9

我假设其中一个元素$_POST确实是一个数组,可视化如下:

print_r($_POST);

Array
(
 ...
    'element' => Array
    (
        'subelement' => 'some value'
    )
 ...
)
Run Code Online (Sandbox Code Playgroud)

array_map试图给的值$_POST['element']mysql_real_escape_string,它抛出你描述的错误.

你可以尝试包装这个(未经测试的)函数:

function recursive_escape(&$value) {
    if (is_array($value))
        array_map('recursive_escape', $value);
    else
        $value = mysql_real_escape_string($value);
}

array_map('recursive_escape', $_POST);
Run Code Online (Sandbox Code Playgroud)


Tyl*_*ter 6

您的值是否可能$_POST是一个数组?

您的表单是否类似于:

<input type="text" name="value[]">
Run Code Online (Sandbox Code Playgroud)

或者其中有任何名字[]?这将导致数组在$_POST数据中.

尝试var_dump荷兰国际集团的$_POST,看看是否有任何值是数组.

如果它是一个数组,那么你有一个问题,因为mysql_real_escape_string不会将数组作为参数.在这种情况下,你会想要看看Cassy的函数来递归地执行它.


您可能想尝试阅读文档以找出两个函数之间的区别:

array_walk_recursive,传递它的函数接收一个键作为第二个参数,而array_map则没有.

(PHP有一个非常好的文档.使用它.)