将sql日期与php日期进行比较

时间:2016-04-30 22:48:29

标签: php mysql

我正在尝试编写SQL查询。在英语中,此查询转换为...

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

以下代码形式的查询:



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

// sql query

SELECT food FROM fridge WHERE date_purchased <= "$date"
&#13;
&#13;
&#13;

我遇到的问题是将sql日期(date_purchased的值)与php日期(我在查询中使用的$ date变量)进行比较。我知道可以在sql查询中包含php变量,但似乎php日期和sql日期不是同一个&#34;类型,&#34;所以sql无法进行比较。我还要提一下,我确保查询中的php日期与sql数据库中的日期格式相同。两者的形式为:YYYY-mm-dd。尽管如此,在我看来,这仍然是一个类型问题。任何见解都非常感谢。

4 个答案:

答案 0 :(得分:0)

试试这个:

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);

答案 1 :(得分:0)

考虑到你提供的信息,一切似乎都很好。

我们必须看到整个代码才能找到错误。也许这是一个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字段中的date_purchased类型。

修改:如果您对该字段使用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();

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

日期&lt;食物2016年5月1日

汉堡包

比萨饼

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

我遇到了同样的问题,上面的(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 查询中使用转换函数,但没有结果。