PHP while循环后输出停止了

3

我有以下的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错误。 我尝试通过数字引用数组而不是关联引用数组,但结果相同。 我写了一百个类似的循环都没有错误,但是在这里我已经没有想法了 :/

你把这个放在网上让我们审查了吗? - Matt Moore
1
你尝试过在 while 循环后面放置其他类型的输出吗?比如只是单词“test”?那样会显示出来吗? - Armatus
1
当循环应该结束时,您正在终止脚本执行... - yoavmatchulsky
4个回答

6

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

Codepad version


我也在想同样的事情...正在尝试重现的过程中。 - Matt Moore

2

不要在循环中使用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>";
}

1

你的 while 条件有误,因为当结果集中的所有行都被获取时,mysql_fetch_array() 返回 false,因此 while 条件变成了 false or die(mysql_error()),这将执行 die() 并终止脚本。

你不应该像那样使用或打印错误到屏幕上。

你所做的错误报告类型应该取决于你是在生产环境还是开发环境中,但无论如何都应该进行错误检查。

我建议你强烈考虑使用 PDO 异常处理、mysqli 或者整个 PHP 框架。使用 mysql_*() API 几乎总是一个坏主意。


mysql 函数集没有任何问题,只是已经被弃用。PDO、mysqli 和 jquery 并不是所有问题的答案。 - Blake

1

这是一个 or die 语句。如果你想让循环在出现错误时停止,可以设置一个自定义的错误处理函数来设置一个布尔值表示是否有错误。然后你可以做一些像这样的事情:

while ($row = mysql_fetch_array($result, MYSQL_ASSOC) or !$error_hander)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接