/**
 * Query the database, and grab a random banner.
 *
 * @return object Database row.
 */
protected function getRandomBanner()
{
    try
    {
        $stmt = $this->db->prepare("SELECT * FROM banners WHERE Type=:type BETWEEN Start AND End ORDER BY RAND() LIMIT 1");
        $stmt->execute(array(':type' => $this->type));
        return $stmt->fetch(PDO::FETCH_OBJ);
    } catch (PDOException $e) {
        echo $e->getMessage();
    }
}


此代码是类的一部分。它根据简单的查询字符串display_banner.php?banner_type = leaderboard查询数据库以显示横幅广告。它完美地工作。

但是,我想添加“ BETWEEN”,以便可以对照横幅的“开始日期”和“结束日期”。

再次,此查询运行-并显示横幅!但是...当我添加“ BETWEEN”时,它不再跟随“ Type”。现在,它显示了矩形和页首横幅。疯狂的是,当我运行此查询时,它在phpMyAdmin中,它运行完美。

最佳答案

您需要比较当前日期,然后必须使用NOW()进行检查。

SELECT *
FROM banners
WHERE Type=:type
    AND NOW() BETWEEN Start AND End
ORDER BY RAND()
LIMIT 1

关于mysql - PDO准备的语句查询不在WHERE之后,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15666969/

10-16 13:45