通过MySQL查询显示PHP即将发生的事件

时间:2018-07-22 18:29:06

标签: php mysql date mysqli


我正在处理一个仅显示即将发生的事件的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()

1 个答案:

答案 0 :(得分:1)

您的问题是,您正在将DATE与STRING进行比较。结果将是不可预测的,最好是 。您需要重写表结构,以将eventDate设置为DATE而不是VARCHAR列。

eventDate varchar(255)  <== varchar is the WRONG type here; you want DATETIME or DATE or similar. 

READ HERE关于如何将列正确转换为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/>"
 } 
?>