0

我试图检索一组将在接下来的 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]";

任何帮助将不胜感激

4

3 回答 3

1

如果您以大致与 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方法将正确的值链接到这些占位符。

于 2012-10-25T18:47:28.627 回答
1

这可以:

$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)。

希望这可以帮助。

于 2012-10-25T19:01:20.763 回答
1

你可以用 MySQL 做到这一点:

SELECT subscriptions.`id` FROM subscriptions WHERE date_add(curdate(),interval 7 day) <= expires AND cust_id =$_SESSION[uid]
于 2012-10-25T19:03:02.163 回答