我已经开发了一个推荐系统,登录的会员可以将推荐信发送给他们的家人/朋友来推荐他们注册。
一切都很好,但昨天决定,我将限制在24小时内可以发送的最大推荐。我把这个限制在每天最多3次。
我发布了一段代码,似乎下面有问题。我所面临的问题是,不管它看起来是什么,我得到的错误信息说,我已经达到今天的最大转介。我不知道我的代码做错了什么。

// referral query
$referral_limit = mysql_query("SELECT 'created_on' FROM 'user_referrals'
WHERE `referrer_uid` = $referrer_uid ") or die(mysql_error());

if(mysql_num_rows($referral_limit) > 0){
    while($row = mysql_fetch_assoc($referral_limit)){

            $db_time = $row['created_on'];

            if((time() - $db_time) > 86400){
                // is within 24 hours and has reached maximum daily referral allowance
                $error[] = "You have reached the maximum referrals for today.";
            }
    }
}

我确实尝试了回显$db_time,当我回显时,返回的只是创建的字段名,而不是在本例中应该显示时间戳的实际值。数据库中的created_on字段包含进行转介的时间戳,我检查该字段以确保转介用户在过去24小时内没有进行转介。
您还将注意到,我没有添加额外的位,将其限制为每天3个,但我不想添加该位,直到我可以首先解决此问题。
数据库表如下所示:
CREATE TABLE IF NOT EXISTS `user_referrals` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`referrer_uid` int(11) NOT NULL,
`recipient_username` varchar(15) NOT NULL,
`referrer_email` varchar(254) DEFAULT NULL,
`referred_id` char(32) NOT NULL,
`referred_email` varchar(254) NOT NULL,
`status` char(9) NOT NULL,
`created_on` int(11) NOT NULL,
`updated_on` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `referred_id` (`referred_id`),
KEY `referrer_uid` (`referrer_uid`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=72 ;

编辑
这是我的密码。它仍然说,在过去的24小时内,即使没有转诊。
我想我查错了。
$referral_limit = mysql_query("
        SELECT COUNT(*)
        FROM `user_referrals`
        WHERE `referrer_uid` = $referrer_uid
        AND `created_on` > UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 1 DAY))") or die(mysql_error());

if($referral_limit > 0) {
    $error[] = "You have reached the maximum referrals for today.";
}

最佳答案

不要在PHP中过滤完整的MySQL结果集,也可以在MySQL中过滤。在您的代码示例中,您可能从MySQL获取数千行,只是为了在筛选循环中运行它们。这是史上最难的表演杀手。而是使用更好的SQL语句:

SELECT COUNT(*) FROM 'referrals' WHERE `referrer_uid`=? AND created_on > UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 1 DAY))

此语句只返回计数(!)在过去24小时内被推荐人的推荐。
此外,您不应该像WHERE name=$name那样直接将变量插入MySQL,这会使您的应用程序面临无数的SQL注入攻击。如果您不知道什么是sql注入,那么现在就应该学习它。

关于php - 使用PHP检查时间在过去24小时内,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6677177/

10-09 21:16