【问题标题】:Display Upcoming Events with PHP from MySQL query使用 PHP 从 MySQL 查询中显示即将发生的事件
【发布时间】:2018-07-22 18:29:06
【问题描述】:


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

正如我在过去的列表中告诉我即将举行的活动节目,以及所有其他活动。 eventDate &lt; CURDATE()

【问题讨论】:

  • 您的 SQL 建议事件日期是字符串而不是日期列。你的错误日志是什么?你的 PHP 是什么?
  • 投票认为这是一个错字,Martin 关于您最有可能存储为 DATE 类型以外的任何内容是正确的,您应该并且会帮助您很多并且不会让您扯掉头发,因为它是。
  • @FunkFortyNiner 最近对开发人员的一项研究发现,使用 MySQL / PHP 的人秃顶的可能性增加了 23%。我想你刚刚找到了原因!
  • @Martin 请看我的 php 代码。

标签: php mysql date mysqli


【解决方案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/>"
 } 
?>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-25
    • 2014-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多