0

シーズン終了日を変数としてこの関数に渡すと、次のエラーが発生します。警告:ゼロ除算

function win_percentage($season_start, $season_end)
{
    $wins = mysql_query("SELECT COUNT(result) FROM scorecards WHERE result = 'Won' AND gamedate >= $season_start AND gamedate <= $season_end;");
    $losses = mysql_query("SELECT COUNT(result) FROM scorecards WHERE result = 'Lost' AND gamedate >= $season_start AND gamedate <= $season_end;");
    $winstotal = mysql_fetch_array($wins);
    $lossestotal = mysql_fetch_array($losses);
    $resultgames = $winstotal['COUNT(result)'] + $lossestotal['COUNT(result)'];
    $winratio = ROUND(($winstotal['COUNT(result)'] / $resultgames),2) * 100;
    return $winratio;
}
echo win_percentage('2012-01-01', '2012-09-10')

出力:警告:ゼロ除算

ただし、シーズン終了の日付値を関数に直接入力すると、完全に機能します。これらとコードブロックの唯一の違いは、3行目と4行目の終わりであり、それ以外はすべて同じです。エラーをスローせずにseason_endをこの関数に渡せないのはなぜですか?

function win_percentage($season_start, $season_end)
{
    $wins = mysql_query("SELECT COUNT(result) FROM scorecards WHERE result = 'Won' AND gamedate >= $season_start AND gamedate <= '2012-12-31';");
    $losses = mysql_query("SELECT COUNT(result) FROM scorecards WHERE result = 'Lost' AND gamedate >= $season_start AND gamedate <= '2012-12-31';");
    $winstotal = mysql_fetch_array($wins);
    $lossestotal = mysql_fetch_array($losses);
    $resultgames = $winstotal['COUNT(result)'] + $lossestotal['COUNT(result)'];
    $winratio = ROUND(($winstotal['COUNT(result)'] / $resultgames),2) * 100;
    return $winratio;
}
echo win_percentage('2012-01-01', '2012-09-10')

出力:57%

前もって感謝します!

4

2 に答える 2

0

日付を引用符で囲む必要があります。

$wins = mysql_query("SELECT COUNT(result) FROM scorecards WHERE result = 'Won' AND gamedate >= $season_start AND gamedate <= '$season_end';");
$losses = mysql_query("SELECT COUNT(result) FROM scorecards WHERE result = 'Lost' AND gamedate >= $season_start AND gamedate <= '$season_end';");

この種のことは、mysqliまたはPDOの使用を開始し、それらのバインドされたパラメーターを使用すると、はるかに簡単になります。SQLインジェクションを回避するだけでなく、すべての引用を処理します。

于 2012-09-11T13:49:33.263 に答える
0

'クエリで使用する場合は、日付値の前後に配置する必要があります。AND gamedate >= '$season_start' AND gamedate <= '$season_end'

も使用する必要がありますmysqli

また、データベースで日付を文字列として保持することも避ける必要があります。

于 2012-09-11T13:52:52.000 に答える