PHP:在循环中使用SQL结果而不重新执行查询

时间:2012-05-18 23:52:28

标签: php mysql arrays for-loop while-loop

我正在尝试添加3个组合框,它们都显示来自我的MySQL数据库的完全相同的信息。看起来我编写的代码会让整个页面等到所有3个组合框都被填充后再继续。

<?
$query = "Select * from tblWriters order by surname";

for ($i = 1; $i <= 3; $i++) {

    $result = mysql_query($query);

    echo "<tr><td>Writer".$i." *</td><td>";
    echo "<select name='txtWriter".$i."' style='width: 200px;'>";
    echo "<option value ='' selected='selected'></option>";

    while ($row = mysql_fetch_array($result))
    {
         echo "<option value ='" . $row['id'] . "'> " . $row['surname'] . ", " . $row['name'] . "</option>";
    }

    echo "</select><td></tr>";
}
?>

我想优化这段代码,因此查询将不会被执行3次,因为我相信这是页面减速的地方。

如果我把

  

$ result = mysql_query($ query);

在for循环之外的

,第二个和第三个组合框不会填充。我试着重置结果的指针,但我似乎无法弄清楚它是如何工作的。

另外,有没有办法可以重复使用while循环,所以我不必执行3次?

有人能指出我正确的方向吗? 我是PHP的新手,并试图自己学习。任何帮助将非常感激。谢谢!

2 个答案:

答案 0 :(得分:0)

如果再次将mysql_query()移出循环,可以在循环的开头或结尾使用mysql_data_seek()重置mysql-result-pointer。

这将导致:

 mysql_query($query);
 for($i=1;$i<=3;$i++);
 {
     mysql_data_seek(0); // reset datapointer

     // output querydata
 }

但我不得不指出,mysql-extension现在已被弃用,您应该使用mysqlipdo来获取新项目和代码。

答案 1 :(得分:0)

将查询结果缓存在一个数组中,然后生成标记:

$query = "Select * from tblWriters order by surname";
$result = mysql_query($query);
$data = array();
while ($row = mysql_fetch_array($result))
{
    $data[] = $row;
}

for ($i = 1; $i <= 3; $i++) {

    echo "<tr><td>Writer".$i." *</td><td>";
    echo "<select name='txtWriter".$i."' style='width: 200px;'>";
    echo "<option value ='' selected='selected'></option>";
    foreach ($data as $row) {
       echo "<option value ='" . $row['id'] . "'> " . $row['surname'] . 
            ", " .   $row['name'] . "</option>";        
    }

    echo "</select><td></tr>";
}