2010-02-09 94 views
1

我有以下代码,不是由我自己写的,但我想知道是否可以发现它有什么问题吗?php sql代码,foreach警告

$query = "SELECT * from #__properties_type where published = 1 AND parent =  ".$Category_id." OR parent = 0"; 

$db->setQuery($query);     

$types = $db->loadObjectList(); 

$nP = count($types); 

$mitems[0]->id=0; 

$mitems[0]->name='Type'; 

    foreach ($types as $item) { 

     $mitems[] = $item; 

    } 

这似乎很好地工作,但有时我会看到一个随机的警告:对等的foreach()提供的无效参数的/ etc /等/

任何想法?

回答

4

您的loadObjectList函数似乎有时会返回一个非数组,有时可能会导致SQL查询失败。

快速修复:

if (is_array($types)) 
foreach ($types as $item) { 

     $mitems[] = $item; 

    } 

,但你应该寻找更深层次的原因,为什么函数调用失败,并相应地处理错误(如果有)。

+0

谢谢你,这个工作! – skarama 2010-02-09 02:35:14

0

这可能意味着您的$types变量未被设置。 这将关闭PHP警告。

+0

有没有办法解决这个问题?我在网上发现一些参考文献说这个警告可以停止,如下所示:“您可以通过在数组变量名称之前使用”(array)“将类型转换为数组类型来防止出现此错误 ” – skarama 2010-02-09 01:49:04

+0

查看我的回答一个修复。 – 2010-02-09 02:02:07

0

除非$mitems[0]在您的代码片段之前被预定义,否则PHP无法知道约$mitems[0]包含对象,因此$mitems[0]->id将会发出警告。

要解决这个问题:

$mitems[0] = new YourObject(); 
$mitems[0]->id=0; 
$mitems[0]->name='Type';