PHP:在不重新执行查询的情况下在循环中使用 SQL 结果


PHP: using SQL result in a loop without re-executing query

我正在尝试添加 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很陌生,并试图自己学习。任何帮助将不胜感激。谢谢!

如果你再次将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扩展现在已被弃用,您应该将mysqli或pdo用于新项目和代码。

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

$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>";
}