Php 使用日期比较从mysql数据库检索数据

Php 使用日期比较从mysql数据库检索数据,php,mysql,Php,Mysql,我想在订阅结束前一个月向我的订阅者发送一个提醒,我的MYSQL数据库中有validity和rementer列(键入VARCHAR) 存储在这些列中的日期是使用php日期函数保存的 $validity = date('d/m/Y',strtotime("6 months")); $reminder = date('d/m/Y',strtotime("5 months")); 现在我想在当前日期等于提醒日期时发送邮件 我有一个测试条目,其提醒值为2017年6月22日,$date变量的值相同 $da

我想在订阅结束前一个月向我的订阅者发送一个提醒,我的MYSQL数据库中有validity和rementer列(键入VARCHAR)

存储在这些列中的日期是使用php日期函数保存的

$validity = date('d/m/Y',strtotime("6 months"));
$reminder = date('d/m/Y',strtotime("5 months"));
现在我想在当前日期等于提醒日期时发送邮件 我有一个测试条目,其提醒值为2017年6月22日,$date变量的值相同

$date = date('d/m/Y');

$q = 'SELECT * FROM subscriptions WHERE reminder = "$date"';
$r = mysql_query($q);

if(!$r){
echo 'query err';
}

$a = mysql_num_rows($r);
echo 'No of rows returned '.$a;

*mailing script after this line*
此脚本输出返回的行数0


有人能告诉我应该如何处理这个问题吗?您的脚本有遭受SQL注入攻击的风险

问题在于:

'SELECT * FROM subscriptions WHERE reminder = "$date"';
将其更改为:

"SELECT * FROM subscriptions WHERE reminder = '".$date."'";

要比较日期,您必须将其包装为单引号。

您的脚本有遭受SQL注入攻击的风险,

问题在于:

'SELECT * FROM subscriptions WHERE reminder = "$date"';
将其更改为:

"SELECT * FROM subscriptions WHERE reminder = '".$date."'";

要比较日期,您必须将其用单引号括起来。

首先,我建议您的日期格式是数据库中的change,并键入change datetime

此格式适用于您插入提醒日期

$reminderdate = date('Y-m-d');
然后在从数据库获取数据时与currentdate进行比较:

$date=date('Y-m-d');
if($r['reminder']==$date)
{
    echo 'Mail sent here';
}
else
{
   echo 'date not match';
}

首先,我建议您的日期格式是数据库中的change,并键入ChangeDateTime

此格式适用于您插入提醒日期

$reminderdate = date('Y-m-d');
然后在从数据库获取数据时与currentdate进行比较:

$date=date('Y-m-d');
if($r['reminder']==$date)
{
    echo 'Mail sent here';
}
else
{
   echo 'date not match';
}
一些建议:

  • 根据您的逻辑,“提醒”列可能是多余的
  • 将来请使用不同的方法连接数据库,例如:
  • validity列应该是
  • 现在谈谈你的主要问题——可能是因为日期类型不匹配,所以在数据库中切换到DATETIME,在PHP中使用date('Y-m-d')
    • 一些建议:

      • 根据您的逻辑,“提醒”列可能是多余的
      • 将来请使用不同的方法连接数据库,例如:
      • validity列应该是
      • 现在谈谈你的主要问题——可能是因为日期类型不匹配,所以在数据库中切换到DATETIME,在PHP中使用date('Y-m-d')

      首先,您不应该将日期存储在varachar中

      现在要比较varchar中的日期,首先必须将字符串(varchar)转换为日期

      为此,您可以使用mysql的函数:


      您可以获得如何转换它的示例,然后比较它以获得结果。

      首先,您不应该将日期存储在varachar中

      $q = "SELECT * FROM subscriptions WHERE reminder = '{$date}'";
      
      现在要比较varchar中的日期,首先必须将字符串(varchar)转换为日期

      为此,您可以使用mysql的函数:


      您可以获得如何转换的示例,然后对其进行比较以获得结果。

      我知道您已经选择了答案,并且忽略了注释,因为您只想完成此操作并继续前进,无论您如何操作。我将把这个答案变成一个社区维基

      $q = "SELECT * FROM subscriptions WHERE reminder = '{$date}'";
      
      以下是您需要注意的事项:

    • 您正在使用的API在很长一段时间前就已经贬值了,而不是使用mysqli或更好的PDO来准备语句

    • 另外,我确信,当用户在网站上订阅时,您应该有一个列来存储订阅的持续时间和实际过期日期,并有一个标志来标识过期订阅

    • Mysql提供了自己的日期时间函数,您可以在这些列上使用和使用日期类型

    • 使用仍处于活动状态并维护的API,即
      mysqli*
      pdo
      ,它们都支持准备好的语句


    • 我知道你已经选择了答案,而忽略了评论,因为你只想把这件事做完,不管你怎么做,继续前进。我将把这个答案变成一个社区维基

      以下是您需要注意的事项:

    • 您正在使用的API在很长一段时间前就已经贬值了,而不是使用mysqli或更好的PDO来准备语句

    • 另外,我确信,当用户在网站上订阅时,您应该有一个列来存储订阅的持续时间和实际过期日期,并有一个标志来标识过期订阅

    • Mysql提供了自己的日期时间函数,您可以在这些列上使用和使用日期类型

    • 使用仍处于活动状态并维护的API,即
      mysqli*
      pdo
      ,它们都支持准备好的语句


    • 请已在PHP7中删除。了解使用PDO的语句,并考虑使用PDO。说。即使是这样也不安全!你的约会没有过去。外部的单引号按原样传递字符串。您需要切换引号,以便双引号位于外部,单引号位于日期周围,以便实际解析日期。但是,您也可以通过切换到或并使用准备好的语句来避免所有这些棘手的引用问题。另外,作为建议,如果您实际使用日期数据类型,MySQL日期比较工作得更好。您可以将日期转换为您希望在取出日期或使用PHP时显示的格式。您应该像
      $q='SELECT*FROM subscriptions WHERE rements='这样定义查询。$date
      是的,正如@jay所说,您的脚本有SQL注入的风险。请。已在PHP7中删除。了解使用PDO的语句,并考虑使用PDO。说。即使是这样也不安全!你的约会没有过去。外部的单引号按原样传递字符串。您需要切换引号,以便双引号位于外部,单引号位于日期周围,以便实际解析日期。但是,您也可以通过切换到或并使用准备好的语句来避免所有这些棘手的引用问题。另外,作为建议,如果您实际使用日期数据类型,MySQL日期比较工作得更好。你可以