在 24 小时后更改值


change a value after 24 hours

如何在 24 小时后更改 mysql 数据库中的值?用户是否需要访问网站才能运行查询?例如,我有一个名为"用户等级"的列,它的值是"10",我希望它在 20 小时后是"24"......

Crontab aka CRON 是最灵活的解决方案,但您需要在 shell 或特定控制面板中使用它具有权限,因为许多托管服务提供商出于安全原因不喜欢共享权限。

首先创建带有更新代码的PHP脚本,如下所示:

<?php
//connect to database
//.... 
//prepare MySQL query
$sql = "UPDATE myTable SET `user-rank` = `user-rank` + 10";
//execute query and handle errors
//...
//optinal reporting on e-mail
//...
//end
?>

接下来,您需要通过在 shell 中调用 "crontab -e" 来向 crontab 添加条目,像这样粘贴代码并保存更改:

0    0     *     *     *     /usr/bin/php -f /path/to/my_update_script.php > /dev/null

此条目将定义每天午夜(服务器时间)对脚本的调用,并忽略脚本的任何输出。

注意:您需要为 php 二进制文件指定确切的路径,该路径对于各种操作系统或用户定义的配置文件可能不同。使用"哪个 php"shell 命令检查它。

---------------更新---------------

没有 crontab 的解决方案。

创建一个新的数据库表php_cron并使用以下MySQL代码插入初始记录(冷杉和仅需要一条):

CREATE TABLE `php_cron` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `last_ts` datetime DEFAULT NULL,
  PRIMARY KEY (`id`)
);
INSERT INTO `php_cron` (`id`, `last_ts`) VALUES (1,'2012-08-10 00:00:00');

然后创建新的PHP脚本,该脚本将保存此类任务所需的所有逻辑,并将其包含在主索引.php文件或其他可以在用户每次访问站点时加载的地方,例如在某些配置或类似脚本中。我想你每天至少会有一位访客。

这个新脚本需要执行两个任务,首先查询那些php_cron表并计算时差,如果差大于 24h(86400 秒),则执行更新用户等级的代码并将新时间戳保存到数据库中。

该脚本可能如下所示:

<?php

    //connect to database
    //.... 
    //get time difference in seconds from last execution
    $sql1 = "SELECT TIME_TO_SEC(TIMEDIFF(NOW(), last_ts)) AS tdif FROM php_cron WHERE id=1";
    $res1 = mysql_query($sql1) or die("[1] MySQL ERROR: ".mysql_error());
    $dif = mysql_fetch_assoc($res1['tdif']);

    if ($dif >= 86400) { //24h
        //following code will run once every 24h
        //update user's page rank
        $sql2 = "UPDATE myTable SET `user-rank` = `user-rank` + 10"; 
        mysql_query($sql2) or die("[2] MySQL ERROR: ".mysql_error());
        //update last execution time
        $sql3 = "UPDATE php_cron SET last_ts = NOW() WHERE id=1";
        mysql_query($sql3) or die("[3] MySQL ERROR: ".mysql_error());
    }
?>

此脚本的时间不准确,但肯定每天运行一次。这可以通过更多的php/mysql逻辑来纠正,但我认为它会完成这项工作。

一个常见的解决方案是设置 cron 作业以定期运行脚本来更新需要更新的任何内容。

您可以设置一些内容来运行查询,检查上次运行时的数据库,然后您可以运行查询(所有这些都是在有人访问站点时进行的)。或者你可以设置一个 cron 作业。

根据您的MySQL版本,您可以使用事件。

首先编辑你的 crontab 文件(在终端中)

crontab -e

将此行添加到文件中:

0    0     *     *     *         php /var/www/myquery.php

第一个 0 表示分钟 0,第二个零表示 0h。其他星号表示工作将每天执行。

在文件 myquery 中.php你放置了一些 php,它将连接到你的数据库并执行你想要的查询。

这是一种在 linux 系统上执行此操作的方法。