PHP / MySQL / PDO:SELECT * FROM表WHERE date = TODAY

时间:2013-10-14 13:14:00

标签: php mysql sql date pdo

数据库中的列(日期)例如说“2013-10-14 14:37:38”。

如何编辑$todaysDate以显示今天的所有日期?我知道我必须在某个地方使用%,但我已经尝试了很多方法而没有成功。 :/

我的代码如下:

$todaysDate = date("Y-m-d");

$query_today = $db->prepare("SELECT * FROM table WHERE date=:date");
$query_today->bindParam(":date", $todaysDate);
$query_today->execute();

更新 以下没有任何工作。我只想从简单的date("Y-m-d")中选择数据库中的所有日期。如果数据库中的日期是“2013-10-14 14:37:38”,我想用2013-10-14选择它。类似于date("Y-m-d%")

5 个答案:

答案 0 :(得分:6)

示例,如果您将搜索今天旁边的其他日期:

$todaysDate = date("Y-m-d"); # or any other date
$query_today = $db->prepare("SELECT * FROM table WHERE DATE(date) = :date");
$query_today->bindParam(":date", $todaysDate);
$query_today->execute();

示例,仅适用于当前日期:

$query_today = $db->prepare("SELECT * FROM table WHERE DATE(date) = CURDATE()");
$query_today->execute();

P.S。但是像@ypercube所说的那样,如果你在日期字段上有索引,那么他的例子将使用该索引。

$todaysDate = date("Y-m-d");
$query_today = $db->prepare("SELECT * FROM table WHERE date >= :date AND date < DATE_ADD(:date, INTERVAL 1 DAY)");
$query_today->bindParam(":date", $todaysDate);
$query_today->execute();

$query_today = $db->prepare("SELECT * FROM table WHERE date >= CURDATE() AND date < DATE_ADD(CURDATE(), INTERVAL 1 DAY)");
$query_today->execute();

答案 1 :(得分:3)

无论该列的类型是DATEDATETIME还是TIMESTAMP,这都将有效,如果有可用的话,它将使用索引:

WHERE date >= CURRENT_DATE
  AND date < CURRENT_DATE + INTERVAL 1 DAY

答案 2 :(得分:2)

一个简单的

SELECT * FROM table WHERE date = DATE(NOW())

应该足够了。

或正如Alma指出的那样,

SELECT * FROM table WHERE date = CURDATE()

答案 3 :(得分:0)

而不是代码:

$query_today = $db->prepare("SELECT * FROM table WHERE date=:date");

使用以下代码:

$query_today = $db->prepare("SELECT * FROM table WHERE DATE_FORMAT(date, '%Y-%m-%d')=:date");

答案 4 :(得分:0)

$query_today = $db->prepare("SELECT * FROM table WHERE DATE(date)=DATE(:date)");