Php MySQL-在过期日期前30天获取数据

Php MySQL-在过期日期前30天获取数据,php,mysql,Php,Mysql,我正在尝试获取过期日期在今天起30天内的数据。 我试过使用BETWEEN子句,但仍然不起作用 表名注册: id exp_date 12 05-20-2018 19 05-19-2018 34 05-22-2018 假设今天的日期是2018年4月28日。我今天将其存储在变量$date\u中 $date_today = '04-28-2018'; $query = "SELECT

我正在尝试获取过期日期在今天起30天内的数据。 我试过使用
BETWEEN
子句,但仍然不起作用

表名注册

id               exp_date

12                05-20-2018
19                05-19-2018
34                05-22-2018
假设今天的日期是2018年4月28日。我今天将其存储在变量
$date\u中

$date_today = '04-28-2018';
$query = "SELECT * FROM registration WHERE expiration_date BETWEEN('$date_today', DATE_SUB(expiration_date, INTERVAL 30 DAY)";
        $test =  mysqli_query($con, $query);
        $row = mysqli_fetch_assoc1( $test);
这就是我得到的错误:

Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, boolean given

BETWEEN
不是一个函数,而是一个运算符。语法是:

BETWEEN low_value AND high_value
您还应该停止使用变量替换,并将准备好的语句与
mysqli\u stmt\u bind\u param()
一起使用。看

要获取未来30天内到期的所有内容,您需要:

WHERE exp_date BETWEEN CURDATE() and DATE_ADD(CURDATE(), INTERVAL 30 DAY)

请注意,它使用的是
DATE\u ADD()
,而不是
DATE\u SUB()
,因为您希望过期日期在将来,而不是过去。

我希望它对您有用

DATEDIFF(d,GETDATE(),expiration_date) >= 30

对于sql server,检查将在1-7天内过期的项目

select sdate, edate, DATEDIFF(MONTH,GETDATE(),edate) as MONTHS from Stockin 
where DATEDIFF(MONTH,GETDATE(),edate) between 1 and 7
order by edate desc

谢谢,错误已被删除,但仍然没有data@Barmar我需要在过期日期前30天获取数据或
id
。意思是今天
2018年4月28日
,到期日是
2018年5月10日
。查询应该得到到期日是
2018年5月10日的id
你是指今天到5月28日之间到期的一切?@Barmar工作正常!谢谢,我们将回顾这里给出的函数。您可以尝试在…之间使用
。。。和…
但是交换日期,所以较早的日期在左边。但不确定日期的顺序是否重要。将日期存储为要匹配的行的日期?哪些不应返回?如果您查看他在到期前30天提出的问题,应该是
。他的样本数据中的一个日期将与您的答案匹配。您的代码在到期前30天以上匹配。他可以将其从>=30更改为=30。