【问题标题】:MySQL current date between 2 set dates2个设定日期之间的MySQL当前日期
【发布时间】:2017-05-21 15:08:30
【问题描述】:

我需要一些关于我正在进行的项目的帮助。 有一个有 2 个日期的表:date1 和 date2(更简单)

现在我需要显示当前日期在 date1 和 date2 之间的所有行。 到目前为止我所拥有的是:

$date = date(Y-m-d);
$sql = 'SELECT * FROM boekingen WHERE "$date" BETWEEN date1 AND date2';

但这不起作用。虽然如果我用 2017-01-06 替换 "$date" 它确实有效。现在我该如何解决这个问题? 提前致谢!

【问题讨论】:

  • 如何在 PHP 中创建 SQL 注入漏洞?您应该使用 mysqli 或 PDO。两者的基本教程都应该告诉您如何使用参数运行查询。请参阅:stackoverflow.com/questions/60174/…(注意:我是 C# 人,所以也许有更好的库,但这些曾经可以工作)
  • 发帖前没有先看说明书吗? php.net/manual/en/function.date.php 你现在所拥有的将彻底抛出一个关于undefined Y constantmdassumed 'Y'...md 的错误............ ......
  • “现在我该如何解决这个问题?” - 你使用了正确的语法。 date("Y-m-d")

标签: mysql date between


【解决方案1】:

您需要在date() 的参数周围加上引号:

$date = date('Y-m-d');

并且您需要将分配给$sql 的字符串用双引号括起来,否则$date 变量将不会被展开。

$sql = "SELECT * FROM boekingen WHERE '$date' BETWEEN date1 AND date2";

What is the difference between single-quoted and double-quoted strings in PHP?

【讨论】:

    【解决方案2】:

    date() 的手册清楚地说明了它的语法和在参数周围使用引号。

    由于您的没有,PHP 假设您已将它们预定义为 constants

    Error reporting 会抛出以下内容:

    注意:使用未定义的常量 Y - 在第 x 行的 /path/to/file.php 中假定为“Y”
    注意:使用未定义的常量 m - 在第 x 行的 /path/to/file.php 中假定为“m”
    注意:使用未定义的常量 d - 在第 x 行的 /path/to/file.php 中假定为 'd'

    Example #4 date() Formatting from the manual:

    <?php
    // Assuming today is March 10th, 2001, 5:16:18 pm, and that we are in the
    // Mountain Standard Time (MST) Time Zone
    
    $today = date("F j, Y, g:i a");                 // March 10, 2001, 5:16 pm
    $today = date("m.d.y");                         // 03.10.01
    $today = date("j, n, Y");                       // 10, 3, 2001
    $today = date("Ymd");                           // 20010310
    $today = date('h-i-s, j-m-y, it is w Day');     // 05-16-18, 10-03-01, 1631 1618 6 Satpm01
    $today = date('\i\t \i\s \t\h\e jS \d\a\y.');   // it is the 10th day.
    $today = date("D M j G:i:s T Y");               // Sat Mar 10 17:16:18 MST 2001
    $today = date('H:m:s \m \i\s\ \m\o\n\t\h');     // 17:03:18 m is month
    $today = date("H:i:s");                         // 17:16:18
    $today = date("Y-m-d H:i:s");                   // 2001-03-10 17:16:18 (the MySQL DATETIME format)
    ?>
    

    【讨论】:

      【解决方案3】:

      使用类似的东西

      $date = date(Y-m-d);
      $sql = 'SELECT * FROM boekingen WHERE STR_TO_DATE(\'$date'\', \'%m/%d/%Y\') BETWEEN date1 AND date2';
      

      确保 date2 大于 date1。

      【讨论】:

        【解决方案4】:
        date = date(Y-m-d);
        $sql = 'SELECT * FROM boekingen WHERE "$date" 
        

        这是您问题的代码。

        在 php 中对字符串使用单引号不会扩展变量。

        $date 周围使用双引号和单引号或连接例如

         $sql = 'SELECT * FROM boekingen WHERE "' . $date .'" 
        

        或 sprintf

         $sql = sprintf('SELECT * FROM boekingen WHERE "%s", $date)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-11-22
          • 2016-05-15
          • 1970-01-01
          • 2012-11-13
          • 1970-01-01
          • 1970-01-01
          • 2012-05-22
          • 2012-03-03
          相关资源
          最近更新 更多