1

如果时间到了,我编写了一个脚本来将用户的密钥活动状态更改为 0。从那里开始时,我设置start_time为 time(); 比设置像“60”这样的天数。

根据我目前的执行方式,我如何计算剩余的时间(以天或小时或分钟为单位)。

$user_info['days'] = "60"

`start_time` = 1332219600


function setup() {
    mysql_connect('localhost', 'stresser_main', 'ZLLAUkuLIUU');
    mysql_select_db('stresser_main');
    $query = mysql_query("SELECT * FROM `keys` WHERE `active`='1'");
    while ($user_info = mysql_fetch_array($query)) {
        $time_ago = strtotime("-" . $user_info['days'] . " day");
        $time_ago_other = strtotime("+" . $user_info['days'] . " day");
        mysql_query("UPDATE `keys` SET `active`='0' WHERE `start_time` < $time_ago AND `id`='" . $user_info['id'] . "'");
    }
}
4

1 回答 1

0
  1. 不要有这样的想法。只更新查询。如果您有 1000 个活动 = 1 的用户已过期,那么您将执行 1000 次更新查询。这样,您将执行 1 个查询来解决您的问题。不需要 select 和 while。

    mysql_query("UPDATE keys SET active = 0 WHERE active = 1 AND start_time < $something");

  2. 在 SQL 上执行所有操作,例如'WHERE start_time < NOW()'. 您也可以对 sql 进行计算。这里有很多 SQL 函数https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html 这会更快更安全。

  3. 不要使用 mysql_ 函数。使用 mysqli_ 或 PDO。

  4. 在表上使用日期时间字段,而不是整数 unix 时间戳。您将能够使用 SQL 日期函数。

  5. 使用 \DateTime() 而不是 strtotime。

于 2013-03-19T11:49:41.830 回答