【问题标题】:PHP check database date field with a php datePHP用php日期检查数据库日期字段
【发布时间】:2014-05-12 18:39:59
【问题描述】:

基本上,我正在做一个简单的婚礼策划师,我正在尝试检查用户插入的日期是否可用或场地是否已预订。基本上,它与我的 SQL 查询有关。最初我正在设置时间:

$time = mktime(0, 0, 0, $month, $day, $year);

然后我有一个 sql 查询,我在其中对照之前设置的 id 变量和传递的日期检查它。

$sql2 = "SELECT * FROM venue_booking WHERE date_booked = ".$time." AND venue_id =".$id;

在这种情况下,数据库中的日期是 2015-01-01,而我经过的日期是 2015-01-01,如果从数据库返回的行数是大于 0 则 echo 已预订,否则 echo 可用。

即使输出的意思是已预订,它仍然显示可用。我根据 mysql 的日期检查时间的方式是否有问题。

date_booked - This is a MySQL date (2014-01-01)

有人有什么想法吗?

【问题讨论】:

  • 您的字段 date_booked 的数据类型是什么。看起来您的数据库数据类型是日期时间,但您传递的是整数。

标签: php mysql


【解决方案1】:

您当前的查询缺少日期字符串的引号,因此无法按原样工作。

但要回答您的问题,只需传递 YYYY-MM-DD 格式的有效日期字符串,您的查询就可以工作:

$date = $_POST['date'];
// Put date validation code here. I.e. make sure it is in YYYY-MM-DD 
// format, etc. Might as well escape it, too since you aren't using 
// prepared statements.
$sql2 = "SELECT * FROM venue_booking WHERE date_booked = '".$date."' AND venue_id =".$id;

我还应该提到,您可能应该改用准备好的语句,因为它会使在查询中使用用户提供的数据更安全。

这是一个可能有用的example of date validation。如果您需要将日期从一种格式转换为另一种格式,this will show you how

【讨论】:

    【解决方案2】:

    mktime() 返回一个 PHP 时间戳,它是一个 unix 时间戳,即“自纪元以来的秒数”,即 1970 年 1 月 1 日。您不能直接将其与 mysql 日期字段进行比较。你真的会这样做

    WHERE '2014-01-01' = 12345678
    

    试试

    $ts = date('Y-m-d h:i:s', mktime(0,0,0,$month, $day, $year));
    
    $sql = "SELECT ... date_booked = '$ts'";
    

    【讨论】:

      猜你喜欢
      • 2019-04-21
      • 1970-01-01
      • 2012-06-16
      • 1970-01-01
      • 2017-12-15
      • 2013-10-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多