【问题标题】:array_map show mysql_real_escape_string() expects parameter 1 [duplicate]array_map show mysql_real_escape_string() 需要参数 1 [重复]
【发布时间】:2011-01-11 12:38:12
【问题描述】:

可能重复:
mysql_fetch_array() expects parameter 1 to be resource, boolean given in select

当我使用时

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

之后是什么原因?

编辑: 如果我使用

array_walk_recursive($_POST, 'mysql_real_escape_string');

然后显示

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

请告诉我以上两种方法的区别? 提前谢谢你

【问题讨论】:

    标签: php arrays


    【解决方案1】:

    你的$_POST 的值有可能是一个数组吗?

    您的表单是否类似于:

    <input type="text" name="value[]">
    

    或者任何名称中有[]?这将导致数组位于 $_POST 数据中。

    尝试var_dump$_POST 看看是否有任何值是数组。

    如果是数组,那么你就有问题了,因为mysql_real_escape_string 不会将数组作为参数。在这种情况下,您需要查看 Cassy 的函数以递归方式执行此操作。


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

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

    (PHP 有一个非常棒的文档。使用它。)

    【讨论】:

    • 是的,数组中有数组
    • 你的回答也很好,很有帮助。
    【解决方案2】:

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

    print_r($_POST);
    
    Array
    (
     ...
        'element' => Array
        (
            'subelement' => 'some value'
        )
     ...
    )
    

    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);
    

    【讨论】:

    • 凯西,我正要发布这个。很好的答案。
    • @Cassy - 谢谢先生,最后一个查询,应用此函数后,我可以直接在 mysql 查询中使用$_post['variable'],或者我需要通过应用上述函数将帖子数组保存在另一个数组中
    • 同样的问题:如果$_POST['variable'] 是一个数组,你仍然需要先展开它,然后才能将它传递给mysql。如果它是一个标量(即字符串或整数),您可以立即使用它。
    猜你喜欢
    • 1970-01-01
    • 2021-02-06
    • 2019-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-23
    • 1970-01-01
    相关资源
    最近更新 更多