可能重复:
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
还请告诉我上述两种方法的区别? 提前谢谢
答案 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有很棒的文档。使用它。)