mysql查询查找日期少于另一个日期

时间:2012-10-25 18:42:21

标签: php mysql date

我试图检索一组将在未来7天内到期的ID,并且在我的生活中无法让我的查询工作

   $target_date = date('Y-m-d', strtotime('+7 days'));
   $sql = "SELECT subscriptions.`id` FROM subscriptions WHERE date($target_date) <= expires AND cust_id =$_SESSION[uid]";

任何帮助将不胜感激

3 个答案:

答案 0 :(得分:1)

如果您以大致与MySQL兼容的格式创建日期,则无需使用DATE函数即可正常工作,只需将其与字符串进行比较即可。

您的代码迫切需要一些可以解决此问题的正确SQL escaping,并且可能会在您的应用程序中出现令人担忧的大量其他问题。

在PDO或mysqli中运行的查询看起来大致如下:

$target_date = date('Y-m-d', strtotime('+7 days'));
$sql = "SELECT subscriptions.`id` FROM subscriptions WHERE ?<=expires AND cust_id=?";

然后,您可以调用相应的bind_param方法将正确的值链接到这些占位符。

答案 1 :(得分:1)

这很好:

$target_date = date('Y-m-d', strtotime('+7 days'));

因为它以与MySQL [YYYY-MM-DD]

相同的方式构建日期

我已切换您的查询,并将DATE()功能应用于'过期'字段,而不是$target_date,因为它不需要。您的过期字段可能是[YYYY-MM-DD HH:MM:SS]格式,这可能是它无效的原因:

$sql = "
SELECT subscriptions.id 
FROM subscriptions 
WHERE DATE(expires) >= '$target_date' 
AND cust_id = '$_SESSION[uid]'";

回显$sql查询以查明其是否正确执行,并使用or die(mysql_error());告诉您失败的位置。

使用SQL转义(PDO或mysqli),如另一个答案中所述。

希望这有帮助。

答案 2 :(得分:1)

你可以用MySQL做到这一点:

SELECT subscriptions.`id` FROM subscriptions WHERE date_add(curdate(),interval 7 day) <= expires AND cust_id =$_SESSION[uid]