PHP注意:数组到字符串转换错误

时间:2013-09-12 08:22:47

标签: php

一段时间以来遇到此错误,无法找到修复它的任何结论性答案。我已尝试在第59行删除$key中的引号,但无济于事。

if (!get_magic_quotes_gpc()) {
    if (isset($_POST)) {
        foreach ($_POST as $key => $value) {
            $_POST['$key'] =  trim(addslashes($value));
        }
    }

    if (isset($_GET)) {
        foreach ($_GET as $key => $value) {
            $_GET[$key] = trim(addslashes($value));
        }
    }   
}

第59行

$_POST['$key'] =  trim(addslashes($value));

屏幕错误

  

注意:数组转换为字符串   C:\ Inetpub \ vhosts \ domain.com \ httpdocs \ library \ config.php on   第59行

4 个答案:

答案 0 :(得分:2)

在分配之前检查它是否是数组

$_POST[$key] =  !is_array($value) ? trim(addslashes($value)) : '';
   //  ^   Remove the quotes here                          //  ^ Do something 
                                                           //  Instead of 
                                                           //  Using empty

答案 1 :(得分:0)

我认为您应该使用此代码$_POST[$key] = $value;而不是使用此$_POST['$key'] = trim(addslashes($value));

或检查值是否在数组中

答案 2 :(得分:0)

根据PHP.net,函数addslashes()将String类型作为参数。检查$ value的类型。如果它是一个数组本身,那么addslashes()可能会抛出错误。

PS: 如果你想使用$ key的值作为$ _POST数组的索引,你应该使用$ _POST [$ key]而不是$ _POST ['$ key']。

答案 3 :(得分:0)

这样做:

foreach ($_POST as &$value) {
    $value = is_array($value) ?
        array_map(function($x) { return trim(addslashes($x)); } :
        trim(addslashes($value));
}

但是,如果您的任何参数是多维数组,则仍可能失败。正如评论中所提到的,正确的解决方案是使用带参数的预准备查询,而不是将字符串插入到SQL中。