当'while循环'一个mysql $ row结果时,它只能在第一个实例中运行

时间:2012-07-04 12:15:53

标签: php mysql loops

任何人都可以提供帮助 - 这让我很生气。

我正在调用一个mysql表,希望不止一次显示结果(或用if语句检查结果)。但是在这个循环中(见下文)它只在第一个实例中调用表及其行作为数组($ i = 1)。这段代码将构建20个名为Box的div,但只用表数据填充第一个div。为什么呢?

我认为我应该在外部循环中使用foreach循环(我已经使用btw在wordPress中使用它)但无法弄清楚语法。任何帮助都会非常感激。

$i=1;
while ($i <= 20)
{
    echo "<div class=\"Box ".$i."\">";
    echo $i;
    echo "<br>";
    while ($row = mysql_fetch_array($result))
    {
    echo $row['name'];
    }
    echo "</div>";
    $i++;

}

5 个答案:

答案 0 :(得分:1)

如果我理解,您试图在循环中多次使用相同的结果资源。

第一次循环结果资源后,您需要将其回退到原始位置,以便能够再次循环它。它可以用mysql_data_seek($result, 0)重绕,但更好的策略是在循环之前将整个事物加载到数组中,然后在每个循环中迭代数组:

// Load everything into the array `$results` first.
$results = array();
while ($row = mysql_fetch_assoc($result)) {
  $results[] = $row['name'];
}

// Better an incremental for loop than a while with a counter
// for a situation where you know the endpoint values of $i
for ($i = 1; $i <= 20; $i++)
{
    echo "<div class='Box $i'>";
    echo $i;
    echo "<br>";
    // Inside your HTML, use the $results array 
    // rather than the MySQL resource
    foreach ($results as $row)
    {
      echo $row['name'];
    }
    echo "</div>";
}

答案 1 :(得分:1)

也许我不太懂,但你应该试试这个:

$i=1;
while ($row = mysql_fetch_array($result) && $i <= 20) {
    echo "<div class=\"Box ".$i."\">";
    echo $i;
    echo "<br>";
    echo $row['name'];
    echo "</div>";
    $i++;
}

因为在你的代码中,你在第一个循环中执行了“mysql循环”。

答案 2 :(得分:0)

尝试这样做,

$i=1;
while ($row = mysql_fetch_array($result))
{
    echo "<div class=\"Box ".$i."\">";
    echo $i;
    echo "<br>";
    echo $row['name'];
    echo "</div>";
    $i++;

}

答案 3 :(得分:0)

一旦给出mysql_fetch_array($ result),$ result不能再用于获取。所以它不会在循环中工作。更好地将结果存储在数组中,并在需要的地方使用它。

答案 4 :(得分:0)

你可以使用mysql_data_seek重置为结果的指针,如果你想再次通过它们,请执行:

mysql_data_seek ( $result, 0 );