我正在尝试编写一个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
。尽管如此,在我看来,这仍然是一个典型的问题。任何见解都值得赞赏。
我遇到了类似的问题,以下是我解决的步骤:
- 将SQL字段类型更改为datetime
- 在php中使用
$date = date('Y-m-d H:i:s
);获取当前日期和时间 - 将您的查询更新为
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
类型)。
编辑:如果对该字段使用date
或datetime
类型,则此示例有效。
冰箱表内容:
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函数,但没有结果。