比较sql日期和php日期


comparing sql date to php date

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

选择数据库中日期_采购字段小于[日期]的所有记录

以下是代码形式的查询:

// 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日期sql日期以sql无法进行比较。

我还应该提到,我已经确保查询中的php日期与sql数据库中的日期具有相同的格式。两者的形式都是:YYYY-mm-dd。尽管如此,在我看来,这仍然是一个典型的问题。任何见解都值得赞赏。

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

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

试试这个:

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

如果您有一个php日期时间变量,请使用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);

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

我们必须查看整个代码才能找到错误。可能是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();

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

带日期的食物<2016-05-01

汉堡

披萨

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