PDO准备语句查询不遵循WHERE

时间:2013-03-27 18:46:37

标签: mysql pdo

/**
 * 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中,当我运行这个查询时,它运行得很好。

1 个答案:

答案 0 :(得分:2)

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

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