24小时后更改值

时间:2012-08-09 20:10:16

标签: php mysql

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

5 个答案:

答案 0 :(得分:5)

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

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

<?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脚本,该脚本将包含此类任务所需的所有逻辑,并将其包含在主index.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());

    }

?>

这个脚本不像CRON那样准确,但肯定会每天运行一次。这可以用更多的php / mysql逻辑来纠正,但我认为它可以完成这项工作。

答案 1 :(得分:4)

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

答案 2 :(得分:1)

您可以设置运行查询的内容,检查数据库的最后一次运行时间,然后您可以运行查询(当有人访问该站点时所有这一切)。或者你可以设置一个cron工作。

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

crontab -e

将此行添加到文件中:

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

第一个0表示分钟0,第二个零表示0h。其他明星意味着每天都要执行这项工作。

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

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