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 回答