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']and$_REQUEST['dateTo']来自 2 个文本框,输入是这样的字符串"05.06.2005"

在 db-table 'artikel'(文章的德语)中,'datum'(日期的德语)列中的值是具有相同格式(“05.06.2005”)的 VARCHAR。

4

2 回答 2

9

始终将日期与日期、整数与整数等进行比较。

使用 MySQL,您可以使用这些str_to_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 注入攻击。

编辑:正如 Dems 上面指出的那样,这是次优的,因为日期值应作为日期值存储在数据库中。

于 2012-10-30T12:50:19.560 回答
1

你可以在之间使用

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