我有以下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><3 kg</th>";
echo "<th>3-7 kg</th>";
echo "<th>>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中看不到任何错误。我试过用数字而不是关联来引用数组,但是得到了相同的结果。
我已经写了一百个类似的循环而没有错误,但我在这里没有想法:/
答案 0 :(得分: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
答案 1 :(得分: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>";
}
答案 2 :(得分:1)
您的while条件存在缺陷,因为mysql_fetch_array()
在从结果集中提取所有行时返回false
,因此while条件变为false or die(mysql_error())
,执行die()
并且杀死剧本。
您不应该使用或不喜欢它,也不应该将错误打印到屏幕上。
您正在执行的错误报告类型应取决于您是在进行生产还是开发,但无论如何都应执行错误检查。
我建议您强烈考虑PDO
之类的例外情况,mysqli
或PHP framework
。使用mysql_*() API
几乎总是一个坏主意。
答案 3 :(得分:0)
这是或死的陈述。如果你想在错误上设置循环模具,则设置一个自定义错误处理函数,如果有错误则设置一个布尔值。然后你可以做类似
的事情while ($row = mysql_fetch_array($result, MYSQL_ASSOC) or !$error_hander)