array_map show mysql_real_escape_string()期望参数1

时间:2010-01-31 22:00:45

标签: php arrays

  

可能重复:
  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

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

2 个答案:

答案 0 :(得分:9)

我假设$_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);

答案 1 :(得分:6)

$_POST的值是否可能是数组?

您的表单是否类似于:

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

或其中任何一个名字都有[]吗?这将导致数组位于$_POST数据中。

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

如果是数组,则表示您遇到问题,因为mysql_real_escape_string不会将数组作为参数。在这种情况下,你会想要看看Cassy的函数来递归地执行它。


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

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

(PHP有很棒的文档。使用它。)