所以我想知道是否有办法在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)
}
?>
答案 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小时...运行您的检查/删除脚本。