【问题标题】:How do you query a database using a Date and Time from PHP Function如何使用 PHP 函数中的日期和时间查询数据库
【发布时间】:2018-05-01 07:26:27
【问题描述】:

如何修复我的查询代码,以便它使用日期和时间搜索数据库,但日期是函数中的变量?我是 PHP 和 SQL 的新手,不知道 Dots (.) 和 Quotations 如何完全工作 ("" '')。如何修复这段代码?

WHERE Fixture.date => '$FixtureDate 00:00:00' AND Fixture.date =< '$FixtureDate 23:59:59'

请看下面的代码

function FSearchDate($FixtureDate) {
    try {
        $conn = new PDO("mysql:host=" . $GLOBALS['servername'] . ";dbname=DATABASE_NAME", $GLOBALS['username'], $GLOBALS['password']);
        $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

        $statement = $conn->query("
        SELECT Fixtures.fixtureid AS FixtureID, 
        Fixtures.date AS Date, 
        Fixtures.week AS Week, 
        Fixtures.home_team AS HomeTeam, 
        Fixtures.away_team AS AwayTeam,
        FixtureScores.home_team AS HomeScore, 
        FixtureScores.away_team AS AwayScore
        FROM Fixtures
        INNER JOIN FixtureScores ON Fixtures.fixtureid=FixtureScores.fixtureid 
        WHERE Fixture.date => '$FixtureDate 00:00:00' AND Fixture.date =< '$FixtureDate 23:59:59'"
        );
        $result = $statement->fetch();

        if ($result == null) { // Fixture ID Doesn't Exist
            echo '<script type="text/javascript">alert("The Fixture ID entered is not valid. Please enter a valid Fixture ID");</script>';
        } else {
            $GLOBALS['FixtureID'] = $result[0];
            $GLOBALS['FixtureDate'] = $result[1];
            $GLOBALS['FixtureWeek'] = $result[2];
            $GLOBALS['FixtureHomeTeamName'] = $result[3];
            $GLOBALS['FixtureAwayTeamName'] = $result[4];
            $GLOBALS['FixtureHomeTeamScore'] = $result[5];
            $GLOBALS['FixtureAwayTeamScore'] = $result[6];
        }
    }
    catch(PDOException $e) {
        echo "An problem occured: " . $e->getMessage();
    }

    $conn = null;
}

【问题讨论】:

  • 尝试不使用FSearchDate() 方法的查询,它有效吗?如果是这样,它是一个变量范围。
  • 请查阅有关 PHP 和 MySQL 集成的教程。 “点”用于字符串连接,引号类型(' vs ")很重要,尤其是在您使用它们的上下文中。

标签: php mysql sql date


【解决方案1】:

您的查询错误:

WHERE Fixture.date => '$FixtureDate 00:00:00' AND Fixture.date =< '$FixtureDate 23:59:59'"

您正在尝试使用 =&gt;=&lt;,它们没有达到您的预期。

=&gt; 是关联数组的分隔符。

应分别读作&gt;=&lt;=,如“大于或等于”和“小于或等于”。

注意:=&lt; 不存在,也不是有效的运算符/分隔符。

大声说出来:“小于或等于”。我们从不说“等于或小于”。

另外,您可能在此处为FSearchDate() 方法设置了一个变量范围,您可能需要将数据库连接传递到该方法。然而,情况可能并非如此。

【讨论】:

    【解决方案2】:

    你可以在这里使用between

    $statement = $conn->query("
        SELECT Fixtures.fixtureid AS FixtureID, 
        Fixtures.date AS Date, 
        Fixtures.week AS Week, 
        Fixtures.home_team AS HomeTeam, 
        Fixtures.away_team AS AwayTeam,
        FixtureScores.home_team AS HomeScore, 
        FixtureScores.away_team AS AwayScore
        FROM Fixtures
        INNER JOIN FixtureScores ON Fixtures.fixtureid=FixtureScores.fixtureid 
        WHERE Fixtures.date BETWEEN 'date('Y-m-d H:i:s',$FixtureDate)' AND 'date('Y-m-d H:i:s',$FixtureDate)'"
        );
    

    检查此声明,

    WHERE Fixtures.date BETWEEN 'date('Y-m-d H:i:s',$FixtureDate)' AND 'date('Y-m-d H:i:s',$FixtureDate)'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-17
      • 2019-04-09
      相关资源
      最近更新 更多