PHP While()停止循环

时间:2010-03-15 02:14:00

标签: php mysql

我有一个php循环,即使有数百个也只显示一条记录。

这是代码:

<?php

$result1 = mysql_query("SELECT * FROM posts") or die(mysql_error());  
$numexem = mysql_num_rows($result1);
$s="0";

while($s<$numexem){
$postid=mysql_result($result1,$s,"id");
echo "Post id:".$postid;

$result2 = mysql_query("SELECT * FROM pics WHERE postid='$postid'") or die(mysql_error());  
$rows = mysql_fetch_array($result2) or die(mysql_error());
$pnum = mysql_num_rows($result2);

echo " There is ".$pnum." Attached Pictures";

$s++;
}

?>

我想知道循环是否停止,因为里面还有其他SQL查询或者什么? 我不这么认为。

由于

2 个答案:

答案 0 :(得分:2)

我建议采用更传统的方法:

$result1 = mysql_query("SELECT * FROM posts") or die(mysql_error());  
while ($row = mysql_fetch_assoc($result1)) {
  ...
}

此外,不要执行所有这些从属查询。代替:

$sql = <<<END
SELECT *, (SELECT COUNT(1) FROM pics WHERE postid = p.postid) pic_count
FROM posts p
END;
$res = mysql_query($sql) or die($sql . ': ' . mysql_error());
while ($row = mysql_fetch_assoc($res)) {
  echo "$row[postid] has $row[pic_count] pictures\n";
}

答案 1 :(得分:0)

不,它不会。默认情况下,MySQL PHP模块会预取与您的查询匹配的所有行,因此您的代码无需担心。

但是,执行一百个查询可能非常耗时。您宁愿收集第一个循环中的所有ID,然后使用SQL IN运算符执行一个单个查询,然后获取这些结果。尽可能避免“嵌套”查询。