0

PHP Warning: Invalid argument supplied for foreach() in /home/synergie/public_html/ss/libraries/joomla/database/database/mysql.php on line 377

它间歇性地出现,但经常出现在我的 joomla 网站的前后。我不是这方面的专家,但它似乎超出了我寻求帮助的每个人的范围。由于我无法阻止错误的发生,我希望您能帮助我禁用或阻止它报告。

这是我正在处理的代码:

  // If we want the whole field data object add that to the list.
            //else
            {
                foreach ($fields as $field)
                {
                    $result[$field->Field] = $field;
                }
            }

            return $result;
4

6 回答 6

4

你确定你循环的是一个数组而不是一个对象吗?可以肯定的是,考虑更改为:

foreach((array)$fields as $field)
{
    $result[$field->Field] = $field;
}
于 2012-04-21T20:54:41.960 回答
2

也许是一个 try catch 块?

try {
    foreach( $array as $v ) {
        // do dtuff
    }
} catch( Exception $e ) {
    echo 'Caught exception';
}
于 2012-04-21T20:40:03.777 回答
2

Instead of hiding the error, you should be checking that you are passing something Traversable to foreach(). You can do that with @NullUserException's is_iterable():

function is_iterable($var) {
    return (is_array($var) || $var instanceof Traversable);
}

if(is_iterable($fields)) {
     foreach($fields as $field) {
         // Processing $field here
     }
} else {
    echo "Fields is not iterable";
}
于 2012-04-21T21:17:40.217 回答
1

您可以使用此功能关闭错误报告:

error_reporting(0);
于 2012-04-21T20:41:06.150 回答
1

如果这是一个生产环境,并且您只是想禁用这样的警告消息(我假设这是您在提到 Joomla 后没有编写的代码),请尝试在您的 php.ini 文件中禁用错误​​报告。

改变:

display_errors On

display_errors Off

请注意,如果这是一个开发环境,您可能应该保留错误报告并修复任何警告。

于 2012-04-21T20:44:07.100 回答
0

我肯定会选择语法:

if(is_array($fields)){
    foreach($fields as $field){
        //do stuff
    }
}

小心使用漂亮而有吸引力的简短形式:

foreach((array)$fields as $field)

如果 $fields 包含复杂的数据结构(不是简单的数组),则转换可能会损害您的内容。

于 2015-02-17T12:17:28.073 回答