php删除未经验证的用户一段时间后mysql

时间:2014-11-19 02:22:55

标签: php mysql

所以我想知道是否有办法在24小时未经验证后从我的数据库中删除未经验证的用户。所以在我的数据库中有一个经过验证的列,其中0表示未经验证,1表示已验证。 (我的验证方法是点击我发送的电子邮件中的链接)。我不希望垃圾邮件用户放慢我的数据库速度,所以我想知道是否有办法做到这一点。这是一些我认为可能有助于解释我所说的代码的演示代码。

<?php
    if($verified === "0"){
       $sql="DELETE FROM users WHERE userid='$id'";
       // In 24 hours if verified still does not equal 1 they get deleted
       mysql_query($sql)
    }

?>

2 个答案:

答案 0 :(得分:0)

我认为你不应该通过删除用户来解决这个问题。相反,请保持发送电子邮件的时间并使用此时间创建IsDeleted标志:

create view v_table as
    select t.*, ( EmailSentDateTime <= (date(now()) - interval 1 day) ) as IsDeleted
    from table t;

或者:

create view v_actives as
    select t.*
    from table t
    where EmailSentDateTime >= (date(now()) - interval 1 day);

然后,您可以定期删除已删除的记录:

delete from table t
    where EmailSentDateTime <= (date(now()) - interval 1 day);

您可以在活动很少的时段(也许是周日早上)安排这个。如果安排得好,你不必担心删除与其他活动的竞争。并且,您不必担心用户&#34;意外&#34;保持活跃,只因为一份工作没有按时完成。

答案 1 :(得分:0)

您可以通过Cron(如果在* nix上)或Windows上的任务执行此操作。

有时在共享主机上您无法访问任何一种情况,在这种情况下,您可以在每次用户访问您网站的某些部分时执行脚本(例如:登录,或者某些不那么频繁的页面)然后查询没有验证超过x小时/天的未验证人员的数据库。

然后是逻辑步骤: 删除所有未经过X小时验证的人。

这不如每X小时运行一次cron一样有效,因为CRON / Task每天上午12点完全运行(例如),所以根据脚本运行的频率,它可以每分钟或每X天运行一次脚本 - 但它仍然可以完成工作。

如果您不想每隔X分钟/秒等运行主脚本并查询数据库,则可以创建文本文件并将最后一次检查时间存储在那里。 当有人访问您的页面时,请检查文本文件的日期/时间,如果您检查后超过24小时...运行您的检查/删除脚本。

相关问题