我正在处理一个MySQL查询,其中只显示即将到来的事件。但我每次都得到一个空白屏幕,并显示在过去的事件列表中。
今天=2018年7月22日,
即将到来的活动日期(eventID) = 2018年7月29日
我的问题是:
SELECT * FROM event WHERE eventDate > CURDATE() ORDER BY STR_TO_DATE(eventDate,'%d %F %Y')
PHP代码(没有css):
$result = mysqli_query($con, $sql);
while($row = mysqli_fetch_assoc($result)) { ?>
<?php echo $row['eventName'] . "<br/>" ?>
<?php echo $row["eventDate"] . "<br/><br/>" ?>
<?php } ?>
数据库表:
eventID int(11) AUTO_INCREMENT
eventName varchar(255)
eventDate varchar(255)
我已经尝试过CURRENT_DATE()
、NOW()
和>=
了
正如我在过去的列表中告诉我的即将到来的活动显示,以及所有其他活动。eventDate < CURDATE()
发布于 2018-07-23 03:00:40
您的问题是您正在将日期与字符串进行比较。充其量,结果将是不可预测的。您需要重写表结构以将eventDate设置为日期列,而不是VARCHAR列。
eventDate varchar(255) <== varchar is the WRONG type here; you want DATETIME or DATE or similar.
有关如何将列正确转换为DATE类型的信息,请使用。
我已经为你重写了你的代码,因为我觉得这个地方应该借鉴CodeReview的一些技巧。
$sql = "SELECT eventName, eventDate FROM event WHERE eventDate > CURDATE() ORDER BY eventDate";
$result = mysqli_query($con, $sql);
while($row = mysqli_fetch_assoc($result)) {
echo htmlentities($row['eventName']) . "<br/>"
echo $row["eventDate"] . "<br/><br/>"
}
?>
https://stackoverflow.com/questions/51468082
复制相似问题