-4

私はこのスクリプトを持っています:

<?php
$result = mysql_query("SELECT * FROM high ORDER BY KC DESC LIMIT 20");

while($row = mysql_fetch_array($result))
{
echo $row['KC'];
echo "<br />";
}
?>

この

<?php
$result = mysql_query("SELECT * FROM high ORDER BY DC DESC LIMIT 20");

while($row = mysql_fetch_array($result))
{
echo $row['DC'];
echo "<br />";
}
?>

DCとKCを占って、割った後の値を表示させたい。

たとえば、DC = 80 および KC = 30

システムは KC から DC を占う ( 80 / 30 = 2.666666666666667 )

私はこれをやってみました:

<?php
$result = mysql_query("SELECT * FROM high ORDER BY Runecraftlvl DESC LIMIT 20");
while($row = mysql_fetch_array($result))
{
echo $row['kills'] / $row['deaths'];
echo "<br />";
}
?>

問題なく動作しますが、変数 KC と DC の両方が 0 の場合、次のエラーが発生します。

警告: /home/justxpp1/public_html/high/highscores.php の 86 行目のゼロ除算

なぜそれが起こっているのですか?

http://gyazo.com/26b3309c8e72d89ccc4cd32f4cdae7cd

4

2 に答える 2

1

ゼロ除算が定義されていないために発生しています。KC と DC がゼロの場合、方程式は 0/0 であり、これはゼロによる除算です。

修正するには、除数 (割る数) がゼロでないことを確認する必要があります。

あなたの例の場合、プレイヤーが一度も死亡していない場合、0 による除算が得られます。がゼロかどうかを確認$row['deaths']し、そうであれば適切なシンボルを表示します。多くの場合、ゼロによる除算は無限大を生成するために受け入れられます。

于 2013-01-27T19:07:48.440 に答える
1

これはあまりにも基本的な質問ですが、考えられる解決策を次に示します。2 番目の変数のみを確認する必要があります。最初の変数は 0 であっても問題ありません。

<?php
$result = mysql_query("SELECT * FROM high ORDER BY Runecraftlvl DESC LIMIT 20");
while($row = mysql_fetch_array($result))
  {
  echo ($row['deaths'] != 0) ? $row['kills'] / $row['deaths'] : '-';
  echo "<br />";
  }
?>

PD、三項演算子を使用します。

あなたが要求したことを行う方法を説明している投稿を見つけました。特定の要求では、これも重要です。SQL で「ゼロ除算」エラーを回避するにはどうすればよいですか?

于 2013-01-27T19:11:58.467 に答える