【问题标题】:comparing sql date to php date比较sql日期和php日期
【发布时间】:2016-08-25 22:58:26
【问题描述】:

我正在尝试编写一个 sql 查询。在英语中,此查询翻译为...

选择数据库中 date_purchased 字段小于 [a date] 的所有记录。

这是代码形式的查询:

// php formatting 
$date = date("Y-m-d");

// sql query

SELECT food FROM fridge WHERE date_purchased <= "$date"

我遇到的问题是将 sql 日期date_purchased 的值)php 日期 $date 我在查询中使用的变量)。我知道可以在 sql 查询中包含 php 变量,但似乎 php datesql date 不是相同的 "type," 所以sql无法进行比较。

我还应该提到,我已确保查询中的 php 日期 与 sql 数据库中的日期具有相同的格式。两者都采用以下形式:YYYY-mm-dd。尽管如此,在我看来,这仍然是一个类型问题。非常感谢任何见解。

【问题讨论】:

  • 能否请您添加您的 sql 查询和 PHP 日期格式代码?
  • @nanocv 见上文。
  • 为什么会有这么多问题?您是如何发现某些事情没有按预期工作的?

标签: php mysql


【解决方案1】:

我遇到了类似的问题,这些是我解决的步骤:

  1. 将 SQL 字段类型更改为日期时间。
  2. 在php中使用$date = date('Y-m-d H:i:s);获取当前日期和时间
  3. 将您的查询更新为SELECT food FROM fridge WHERE date_purchased &lt;= '$date'(将您的双引号更改为单引号)。

【讨论】:

    【解决方案2】:

    试试这个:

    SELECT * FROM tbl1 WHERE user_id = "User1" and date_purchased < "2016-01-01";
    

    如果你有一个 php datetime 变量,使用 format 来创建一个字符串:

    $date->format('Y-m-d');
    

    在上下文中,这可能如下所示:

    $date_str = $date->format('Y-m-d');
    $sql_pattern = 'SELECT * FROM tbl1 WHERE user_id = "%s" and date_purchased < "%s";';
    $sql = sprintf($sql_pattern, $user_name, $date_str);
    

    【讨论】:

      【解决方案3】:

      只要记住您提供的信息,一切似乎都很好。

      我们必须查看整个代码才能找到错误。可能是 MySQL 字段类型问题,也可能是您将查询发送到 MySQL 的方式。

      我在这里有一个工作示例,其中包含您的表的最小版本。希望对你有帮助!

      冰箱表字段:

      mysql> desc fridge;
      +----------------+------------------+------+-----+---------+----------------+
      | Field          | Type             | Null | Key | Default | Extra          |
      +----------------+------------------+------+-----+---------+----------------+
      | id             | int(11) unsigned | NO   | PRI | NULL    | auto_increment |
      | food           | varchar(20)      | YES  |     | NULL    |                |
      | date_purchased | date             | YES  |     | NULL    |                |
      +----------------+------------------+------+-----+---------+----------------+
      

      (注意 date_purchased 字段中的 date 类型)。

      编辑:如果您对该字段使用 datedatetime 类型,则此示例有效。

      冰箱表内容:

      mysql> select * from fridge;
      +----+-----------+----------------+
      | id | food      | date_purchased |
      +----+-----------+----------------+
      |  1 | hamburger | 2016-04-28     |
      |  2 | pizza     | 2016-04-12     |
      |  3 | salad     | 2016-05-10     |  <-- future date
      |  4 | fruit     | 2016-05-04     |  <-- future date
      +----+-----------+----------------+
      

      PHP代码(使用语句查询数据库):

      <?php
      $servername = "localhost";
      $username = "username";
      $password = "password";
      $dbname = "myDB";
      
      // Create connection
      $conn = new mysqli($servername, $username, $password, $dbname);
      
      if ($conn->connect_error) {
          die("Connection failed: " . $conn->connect_error);
      }
      
      // prepare and bind
      $stmt = $conn->prepare("select food from fridge where date_purchased < ?");
      $stmt->bind_param("s", $date);
      
      // set parameters and execute
      $date = date("Y-m-d");  // NOTE: $date stores the current date
      echo "<p>Food with date < $date</p>";
      $stmt->execute();
      
      // bind variables to prepared statement
      $stmt->bind_result($food);
      
      // fetch values (here you can do whatever you want with results)
      while ($stmt->fetch()) {
          echo "<p>$food</p>";
      }
      
      $stmt->close();
      $conn->close();
      

      结果(我们现在不想要健康食品……):

      日期

      汉堡包

      披萨

      【讨论】:

        【解决方案4】:

        我遇到了同样的问题,似乎对我有用的是上面的(PHP 代码):

        $cur_dt = date('Y-m-d');
        
                  $sql = "SELECT date, text FROM rantevou WHERE user_id = '$id' ";
                  $result = mysqli_query($link, $sql);
        
                  if (mysqli_num_rows($result) > 0) {
        
                    while($row = mysqli_fetch_assoc($result)){
                      $date = $row["date"];
                      if ($date <= $cur_dt){
                        
                      }
                      
                    }
                  }
        

        我也尝试在 sql 查询中使用转换函数,但没有结果。

        【讨论】: