2016-04-30 91 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)。