我正在尝试编写SQL查询。在英语中,此查询转换为...
"选择date_purchased字段小于[a date]的数据库中的所有记录。"
以下代码形式的查询:
// php formatting
$date = date("Y-m-d");
// sql query
SELECT food FROM fridge WHERE date_purchased <= "$date"
&#13;
我遇到的问题是将sql日期(date_purchased的值)与php日期(我在查询中使用的$ date变量)进行比较。我知道可以在sql查询中包含php变量,但似乎php日期和sql日期不是同一个&#34;类型,&#34;所以sql无法进行比较。我还要提一下,我确保查询中的php日期与sql数据库中的日期格式相同。两者的形式为:YYYY-mm-dd。尽管如此,在我看来,这仍然是一个类型问题。任何见解都非常感谢。
答案 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
类型。
修改:如果您对该字段使用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();
结果(我们现在不想要健康食品......):
日期&lt;食物2016年5月1日
汉堡包
比萨饼
答案 2 :(得分:0)
我遇到了类似的问题,这些是我要解决的步骤:
$date = date('Y-m-d H:i:s
);获取当前日期和时间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 查询中使用转换函数,但没有结果。