【发布时间】:2016-10-03 15:34:50
【问题描述】:
所以我有点糊涂了。我的客户选择 10-01-2016($datefrom 变量)和 10-02-2016($dateto 变量)。执行时,它将返回 2015 年和 2016 年的日期。
这是我的 php 代码:
$datefrom = $mysqli->real_escape_string($_GET['datefrom']);
$dateto = $mysqli->real_escape_string($_GET['dateto']);
$query = "SELECT * FROM tbl_Dates WHERE (DATE_FORMAT(date, '%m-%d-%Y') BETWEEN '$datefrom' AND '$dateto') AND date_type='1'";
当我在 MySQL 中运行以下查询时(只是替换变量):
SELECT * FROM tbl_Dates WHERE (DATE_FORMAT(date, '%m-%d-%Y') BETWEEN '10-01-2016' AND '10-02-2016') AND date_type='1';
它运行并提供 2015 年和 2016 年的日期记录。
当我将 DATE_FORMAT 行和变量更改为以下内容时:
SELECT * FROM tbl_Dates WHERE (DATE_FORMAT(date, '%Y-%m-%d') BETWEEN '2016-10-01' AND '2016-10-02') AND date_type='1';
运行良好,只给出 2016 年的日期记录。
系统大约有一年的历史了,哈哈,这就是为什么它现在给出错误的原因。如何更正 SQL 语法以使其正确查询,而无需更改使用 %d-%m-%Y 格式的行的 php 代码?
感谢你们提供的任何帮助, 吉姆
【问题讨论】:
-
那么这是第10年第1个月的第2016天?
-
我不会在 PHP 中解析日期以避免在 sql 语句中使用 DATE_FORMAT。您的查询将解析所有表的所有日期。如果您改为传递正确格式的日期,则不会执行此操作,并且错误可能就是这种方式。