循环时输出在 php 之后停止


Output stops after php while loop

我有以下php代码:

echo "<div style='float:left;'>";
echo "<table>";
echo "<tr>";
echo "<th></th>";
echo "<th colspan='4'>Laks beholdt</th>";
echo "</tr>";
echo "<tr>";
echo "<th>Uke</th>";
echo "<th>&lt;3 kg</th>";
echo "<th>3-7 kg</th>";
echo "<th>&gt;7 kg</th>";
echo "<th>Totalt</th>";
echo "</tr>";
while ($row = mysql_fetch_array($result, MYSQL_ASSOC) or die(mysql_error()))
{
   echo "<tr>";
   echo "<td>" . $row['Uke'] . "</td>";
   echo "<td style='text-align:right; padding-right:10px;'>" . number_format($row['SumSmall'], 1,
      ",", " ") . " kg</td>";
   echo "<td style='text-align:right; padding-right:10px;'>" . number_format($row['SumMedium'], 1,
      ",", " ") . " kg</td>";
   echo "<td style='text-align:right; padding-right:10px;'>" . number_format($row['SumLarge'], 1,
      ",", " ") . " kg</td>";
   echo "<td style='text-align:right; padding-right:10px;'>" . number_format($row['SumVekt'], 1, ",",
      " ") . " kg</td>";
   echo "</tr>";
}
echo "</table>";
echo "</div>";

我从 while 循环中获得了预期的输出,但我的表和div 的结束标签——或任何其他输出——没有显示。我没有收到任何错误消息,并且在我的 html 中看不到任何错误。我尝试通过数字而不是关联来引用数组,但我得到了相同的结果。

我已经写了一百个类似的循环没有错误,但我在这里没有想法:/

or die()语句导致它停止执行。当$row = mysql_fetch_array($result, MYSQL_ASSOC)应该停止循环时,它会击中die()。由于没有错误,因此不会从mysql_error()打印任何内容

echo "Before loop'n";
$x = 1;
while($foo = bar($x) or die('Died')) {
    echo $x++, "'n";
}
echo "After loop'n";
function bar($x) {
    if($x < 5) {
        return $x;
    }
    return false;
}
//outputs:
//Before loop
//1
//2
//3
//4
//Died

代码板版本

不要在循环中使用die()

while ($row = mysql_fetch_array($result, MYSQL_ASSOC))
{
   echo "<tr>";
   echo "<td>" . $row['Uke'] . "</td>";
   echo "<td style='text-align:right; padding-right:10px;'>" . number_format($row['SumSmall'], 1,
      ",", " ") . " kg</td>";
   echo "<td style='text-align:right; padding-right:10px;'>" . number_format($row['SumMedium'], 1,
      ",", " ") . " kg</td>";
   echo "<td style='text-align:right; padding-right:10px;'>" . number_format($row['SumLarge'], 1,
      ",", " ") . " kg</td>";
   echo "<td style='text-align:right; padding-right:10px;'>" . number_format($row['SumVekt'], 1, ",",
      " ") . " kg</td>";
   echo "</tr>";
}

它是 or die 语句。 如果要让循环在错误时死亡,请设置一个自定义错误处理程序函数,该函数在出现错误时设置布尔值。 然后你可以做一些类似的事情

while ($row = mysql_fetch_array($result, MYSQL_ASSOC) or !$error_hander)
您的 while 条件

是有缺陷的,因为当从结果集中获取所有行时mysql_fetch_array()返回false,因此 while 条件变为false or die(mysql_error())执行die()并杀死脚本。

您不应该使用或类似,也不应该像那样将错误打印到屏幕上。

您正在执行的错误报告类型应取决于您是生产还是开发,但无论如何都应执行错误检查。

我建议您强烈考虑像PDO例外,mysqli或完全PHP framework之类的东西。使用mysql_*() API几乎总是一个坏主意。