我试图检索一组将在接下来的 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]";
任何帮助将不胜感激
如果您以大致与 MySQL 兼容的格式创建日期,则无需使用该DATE
函数即可工作,只需将其作为字符串进行比较即可。
您的代码迫切需要一些适当的SQL 转义来解决此问题,并且可能会在您的应用程序中出现令人担忧的大量其他问题。
在 PDO 中运行的查询mysqli
大致如下所示:
$target_date = date('Y-m-d', strtotime('+7 days'));
$sql = "SELECT subscriptions.`id` FROM subscriptions WHERE ?<=expires AND cust_id=?";
然后,您可以调用适当的bind_param
方法将正确的值链接到这些占位符。
这可以:
$target_date = date('Y-m-d', strtotime('+7 days'));
因为它以与 MySQL 相同的方式构造日期[YYYY-MM-DD]
我已经切换了您的查询并将该DATE()
功能应用于“过期”字段,而不是您$target_date
不需要的。您的 expires 字段可能是[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)。
希望这可以帮助。
你可以用 MySQL 做到这一点:
SELECT subscriptions.`id` FROM subscriptions WHERE date_add(curdate(),interval 7 day) <= expires AND cust_id =$_SESSION[uid]