php + mysqli while(false!==($ data = $ mysqli_res-> fetch_assoc))创建无限循环

时间:2011-09-18 19:21:31

标签: php mysql while-loop infinite-loop

我在管理面板中写了新评论的概述。我的代码

if($res = $db->query("select * from comments where unlocked=0"));
{
    $o = 0; //abortcondition temp
    echo '<div class="newcomments"><a>neuste kommentare: </a><br />';
    //here is the infinite loop
    while(false !== ($data = $res->fetch_assoc()) && ++$o < 10)
    {
        if($articles = $db->query("select title from coreless_articles where ID=".$data['article']))
        {
            if(false !== ($article = $articles->fetch_assoc()))
            {
                echo 
                '<div id="comment'.$data['ID'].'">'.$data['from'].' in'.
                ' <a href="article/'.($article['uri']).'#comments">'.$article['title'].'</a>'.
                ' <a href="javascript:;">anzeigen</a>'.
                ' <a href="javascript:;">freischalten</a>'.
                ' <a href="javascript:;">l&ouml;schen</a>'.
                ' <div class="preview" >'.$data['text'].'</div>'.
                '</div>';
            }
        }
    }
}
如果我没有$ o中止条件,

会创建一个无限循环。但我想展示所有新评论,而不只是++ $ o&lt; ñ。我使用mysqli来访问数据库。

任何想法?

2 个答案:

答案 0 :(得分:2)

mysqli_result :: fetch_assoc在为空时返回NULL,而不是FALSE。 http://www.php.net/manual/en/mysqli-result.fetch-assoc.php

  

返回与获取的行或对应的关联数组   如果没有更多行,则为NULL。

只需将测试更改为NULL !== (etc)

(这很令人困惑,因为等效函数mysql_fetch_assoc() 返回FALSE。)

答案 1 :(得分:0)

为什么要测试负面情况?你为什么不直接测试积极的那个?

while($data = $res->fetch_assoc())
{
 ...
}

无论如何,@evan解释为什么代码创建一个无限循环绝对正确。