2016-04-30 26 views
0

私はSQLクエリを作成しようとしています。英語では、このクエリは...sqlの日付をphpの日付と比較する

"date_purchasedフィールドが[日付]より小さいデータベース内のすべてのレコードを選択します。

ここでコード形式のクエリです:

// php formatting 
 
$date = date("Y-m-d"); 
 

 
// sql query 
 

 
SELECT food FROM fridge WHERE date_purchased <= "$date"

私がいる問題はPHPの日付($日付変数にSQLの日付(date_purchasedの値)を比較しています私は私のクエリで使用しています)。 PHPの変数をSQLクエリに含めることは可能ですが、phpの日付とsqlの日付が同じ「タイプ」ではないように見えるので、sqlは比較を行うことができません。私は私のクエリのPHPの日付がSQLデータベースの日付と同じ書式を持っていることを確認したことを言及すべきです。どちらもYYYY-mm-ddの形式です。それにもかかわらず、これはまだタイプの問題が好きです。どんな洞察も大変ありがとうございます。

+0

sqlクエリとPHPの日付書式設定コードを追加してください。 – nanocv

+0

@nanocv上記を参照してください。 – Brinley

答えて

0

これを試してください:あなたはPHPでのdatetime変数を使用している場合

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

は、使用形式は、文字列を作成するには、次の状況では

$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タイプに注意)。

編集:この例あなたは、そのフィールドの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年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'としてクエリを更新します(二重qoutをシングルqouteに変更します)。