0

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

4

2 回答 2

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用于新项目和代码。

于 2012-05-19T00:01:54.020 回答
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>";
}
于 2012-05-19T00:02:34.687 回答