2016-04-30 87 views
0

我正在尝试编写一个sql查询。在英语中,该查询翻译为...将sql日期与php日期进行比较

“选择date_purchased字段小于[某个日期]的数据库中的所有记录”。

这里的以代码的形式查询:

// 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。尽管如此,这在我看来仍然是一个类型问题。任何见解都非常感谢。

+0

请问您可以添加您的SQL查询和PHP日期格式代码? – nanocv

+0

@nanocv见上文。 – Brinley

回答

0

试试这个:

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

如果你有一个PHP日期时间变量,使用的格式创建一个字符串:

$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); 
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_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代码(using语句来查询数据库):

<?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年5月1日

汉堡

比萨饼

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