我试图检索一组将在未来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]";
任何帮助将不胜感激
答案 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]