mysql_fetch_assoc进入无限循环

时间:2016-03-12 16:48:48

标签: php mysql

我正在尝试使用while循环显示特定条件的帖子,但它给了我30秒的超时错误。这是我的代码:

while ($tagrow = mysql_fetch_assoc(mysql_query("SELECT * FROM posts WHERE tag='$usersearch' ORDER BY id DESC"))) {
         $stufftoecho .= $tagrow['text'];
        }

使用while循环的行有一个超时错误,我想这是一个无限循环,但我不知道如何修复它。

注意:请不要告诉我需要使用mysqli或PDO,我稍后会转换为其中一个。

4 个答案:

答案 0 :(得分:1)

在while循环中运行mysql_query()一次。

$sql = "SELECT * FROM posts WHERE tag='$usersearch' ORDER BY id DESC";

$result = mysql_query($sql);


while ($row = mysql_fetch_assoc($result)) {
    echo $row['text'];   }

mysql_free_result($result);

答案 1 :(得分:0)

每次进行循环时,您似乎都在运行查询。试试这个,

$result = mysql_query("SELECT * FROM posts WHERE tag='" . $usersearch . "' ORDER BY id DESC"); //execute query

if ($result)
    {
    while ($tagrow = mysql_fetch_assoc($result))
        {
        $stufftoecho.= $tagrow['text'];
        }
    }
  else
    {
    echo mysql_error();
    }

答案 2 :(得分:0)

我建议你把它分成几块。

$query = mysql_query("SELECT * FROM posts WHERE tag='".$usersearch."' ORDER BY id DESC") or die(mysql_error());

while ($tagrow = mysql_fetch_assoc($query)) {
     $stufftoecho .= $tagrow['text'];
}

希望这有帮助。

和平!的xD

答案 3 :(得分:0)

如果至少有一个元素与查询匹配,那么这当然是一个无限循环;我怀疑在你的无限循环中,你永远不会超过查询返回的第一个元素。

while ($tagrow = mysql_fetch_assoc(mysql_query("SELECT * FROM posts WHERE tag='$usersearch' ORDER BY id DESC"))) {

函数mysql_fetch_assoc将接收查询的结果集,并遍历它,每次调用时返回系列中的下一个元素。

函数mysql_query将接受查询并返回结果集;

他们将你的while循环结构化,你将执行查询,并将结果集直接传递给 fetch_assoc ,这将分配 $ tagrow的值到第一个元素;然后再做一次。

我们需要做的是执行查询,然后保存结果集。这使得您只需要执行一次查询,而不是每次迭代,并将结果保存在内存中。

我们可以通过简单地将其分成以下两行,并使用变量作为查询结果的临时存储来实现。

$results = mysql_query( "SELECT * FROM posts WHERE tag='$usersearch' ORDER BY id DESC" );
while ( $tagrow = mysql_fetch_assoc( $results ) ) {