0

次のような状況があります: 患者は、今日から週に 2 回のオンライン予約を許可されています。

私のコードは次のとおりです。

$user_id = $_SESSION['id'];
$datum1 = date("d-n-Y");
$datum2 = date("d-n-Y", strtotime(date("Y-m-d", strtotime($datum)) . " +7 days"));
$query = "SELECT * FROM afspraken WHERE user_id='$user_id' AND datum BETWEEN '$datum1' AND '$datum2'";

値を含むクエリ:

SELECT * FROM afspraken WHERE user_id='2' AND datum BETWEEN '24-4-2012' AND '01-5-2012'

それでも PhpMyAdmin は 0 の結果を返しますが、10 を超えるレコードがあります。

id  user_id datum   begintijd   opmerking
55  2   24-4-2012   9:30    Deze afspraak is online gemaakt.
56  2   24-4-2012   10:00   Deze afspraak is online gemaakt.

誰かが私のクエリで何が間違っているかを見ていますか?

前もって感謝します。

4

3 に答える 3

1

MySQL に任せることで、日付表現エラーを除外できます。

$query = "SELECT * FROM afspraken WHERE user_id='$user_id' AND datum BETWEEN CURRENT_DATE AND DATE_ADD(CURRENT_DATE, INTERVAL 1 WEEK)";

一般に、'YYYY-MM-DD' の形式が必要になるでしょう。

別のこと: あなたのコードはSQL インジェクションに対して脆弱です。準備済みステートメントを使用します。読みやすく、文字列フィールドなどで一重引用符やバックスラッシュをエスケープします。

于 2012-04-24T21:45:04.847 に答える
0

MYSQL Doc から:

日付または時刻の値で BETWEEN を使用する場合に最良の結果を得るには、CAST() を使用して値を目的のデータ型に明示的に変換します。

http://dev.mysql.com/doc/refman/5.5/en/comparison-operators.html#operator_between

日付をWHERE句の DATE MySQL データ型としてキャストしてみます。

したがって、クエリを次のように変更します。

SELECT * FROM afspraken WHERE user_id='2' AND datum BETWEEN CAST('24-4-2012' AS DATE) AND CAST('01-5-2012' AS DATE);
于 2012-04-24T21:36:57.770 に答える
0

最初に、データベース内のフィールド「datum」が日付フィールドであるかどうかを確認します。クエリを次のように置き換えます。

SELECT * FROM afspraken WHERE user_id='2' AND datum BETWEEN '24/4/2012' AND '01/5/2012'
于 2012-04-24T21:39:19.887 に答える