我正在尝试使用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,我稍后会转换为其中一个。
答案 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 ) ) {