3

日付があるMySqlサーバーからエントリを取得しようとしています> date_begin and < date_end

私の問題は、テーブルの列 " date" が に設定されてVARCHARおり、それを比較している文字列も<input type="text"/>

mysql テーブルとテキスト ボックスの日付形式 (文字列 / varchar として) は次のようになります。DD.MM.YYYY

私の問題は、もしそうなら

(phpコード)

 $query = "SELECT * FROM table WHERE date>='" . $dateBegin . "' AND date<='" . $dateEnd . "'";

結果は完全にランダムになります。

なぜこれが起こっているのかはわかっているので、質問は次のとおりです。これを比較して正しい結果を得るにはどうすればよいですか?

助けてくれるすべての人に感謝します

アップデート :

今、私はこの解決策を試しましたが、うまくいきません。

$query = "SELECT * FROM artikel WHERE STR_TO_DATE(datum, '%d.%m.%Y')>=STR_TO_DATE('" . $_REQUEST['dateTo'] . "', '%d.%m.%Y')" . "' AND STR_TO_DATE(datum, '%d.%m.%Y')<=STR_TO_DATE('" . $_REQUEST['dateTo'] . "', '%d.%m.%Y')";

$_REQUEST['dateFrom']$_REQUEST['dateTo']は 2 つのテキストボックスから来ており、入力はこのような文字列です"05.06.2005"

db-table 'artikel' (記事のドイツ語) 列 'datum' (日付のドイツ語) の値は、同じ形式 ( "05.06.2005" ) の VARCHAR です。

4

2 に答える 2

9

日付と日付、整数と整数などを常に比較します。

MySQL では、関数を使用しstr_to_dateて string-date の処理方法を指定できます。

http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_str-to-date

たとえば、日付列が「mydate」と呼ばれる場合:-

SELECT * from table
where STR_TO_DATE(mydate, '%m/%d/%Y') >= STR_TO_DATE('04/31/2004', '%m/%d/%Y')
...

また、SQL インジェクション攻撃を回避するために、ユーザーからの文字列入力を常に検証していることを確認してください。

EDIT : Dems が上記で指摘しているように、日付値はデータベースに日付値として保存する必要があるため、これは最適ではありません。

于 2012-10-30T12:50:19.560 に答える
1

間で使用できます

"SELECT * FROM table WHERE date between'" . $dateBegin . " AND " . $dateEnd . "'";
于 2012-10-30T12:50:36.097 に答える