Php 在24小时后更改值

Php 在24小时后更改值,php,mysql,Php,Mysql,24小时后如何更改mysql数据库中的值? 用户是否需要访问网站才能运行查询? 例如,我有一个名为user rank的列,它的值是10,我希望它在24小时后是20…根据您的MySQL版本,您可以使用事件。根据您的MySQL版本,您可以使用事件。常见的解决方案是设置定期运行脚本以更新需要更新的内容。常见的解决方案是设置定期运行脚本以更新需要更新的内容。您可以设置运行查询的内容,检查数据库的上次运行时间,然后当有人访问该站点时,您可以运行所有这些查询。或者您可以设置一个cron作业。您可以设置运行查

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

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

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

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

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

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

您可以设置运行查询的程序,检查数据库的上次运行时间,然后在有人访问站点时运行所有这些查询。或者您可以设置cron作业。

首先在终端中编辑crontab文件

crontab -e
将此行添加到文件中:

0    0     *     *     *         php /var/www/myquery.php
第一个0表示0分钟,第二个0表示0小时。其他星星意味着每天都要执行任务

在文件myquery.php中,您放置了一些将连接到数据库并执行所需查询的php


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

首先在终端中编辑crontab文件

crontab -e
将此行添加到文件中:

0    0     *     *     *         php /var/www/myquery.php
第一个0表示0分钟,第二个0表示0小时。其他星星意味着每天都要执行任务

在文件myquery.php中,您放置了一些将连接到数据库并执行所需查询的php


这是在linux系统上实现的一种方法。

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
?>
<?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二进制文件指定确切的路径,对于不同的操作系统或用户定义的概要文件,该路径可能不同。用哪个php shell命令检查它

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

没有crontab的解决方案

创建一个新的数据库表php_cron并插入初始记录firs,并且仅插入一个必需的记录firs,使用以下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脚本,该脚本将保存此类任务所需的所有逻辑,并将其包含在您的master index.PHP文件中,或者在用户每次访问您的站点时都可以加载它的其他位置,例如在某些配置或类似脚本中。我想你们每天至少会有一位访客

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

该脚本可能如下所示:

<?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
?>
<?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逻辑来纠正,但我认为它可以完成这项工作。

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
?>
<?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二进制文件指定确切的路径,对于不同的操作系统或用户定义的概要文件,该路径可能不同。用哪个php shell命令检查它

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

没有crontab的解决方案

创建一个新的数据库表php_cron并插入初始记录firs,并且仅插入一个必需的记录firs,使用以下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脚本,该脚本将保存此类任务所需的所有逻辑,并将其包含在您的master index.PHP文件中,或者在用户每次访问您的站点时都可以加载它的其他位置,例如在某些配置或类似脚本中。我想你们每天至少会有一位访客

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

该脚本可能如下所示:

<?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
?>
<?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逻辑来纠正,但我认为它会起到作用。

你能详细说明为什么、什么值以及什么时候你想改变这个数字吗?@AndreasChristodoulou他给了他想要24小时改变的时间。你能不能
请详细说明为什么、哪些值以及何时更改此数字?@AndreasChristodoulou他给出了24小时更改的时间。您能给我一个非常简单的PHP代码吗?我没有访问shell的权限!你能给我一个非常简单的PHP代码来做这件事吗?我没有访问shell的权限!只有我的主机中的文件。好的,我将用新的解决方案修改我的答案。谢谢。但如果我把它放在我的头PHP文件中,例如,每次访问都会加载它。服务器的CPU在每天的高访问量下将承受很大的压力。我说的对吗?是的,但只针对一个或多个MySQL查询,所以这不会对性能造成太大影响。另一方面,如果你有这么大的流量,考虑一些其他主机或专用服务器,包括CRON的可用选项的全范围的选项;是的,你是对的。还有一件事;为了测试这一点,我可以在本地使用Crontab吗?正如我所知,Windows上没有对Crontab的本机支持,所以您需要使用任务调度器来模拟这种行为。基于php/mysql的解决方案几乎可以在任何web服务器上运行,包括WAMP。好的,我将用新的解决方案修改我的答案。谢谢。但如果我把它放在我的头PHP文件中,例如,每次访问都会加载它。服务器的CPU在每天的高访问量下将承受很大的压力。我说的对吗?是的,但只针对一个或多个MySQL查询,所以这不会对性能造成太大影响。另一方面,如果你有这么大的流量,考虑一些其他主机或专用服务器,包括CRON的可用选项的全范围的选项;是的,你是对的。还有一件事;为了测试这一点,我可以在本地使用Crontab吗?正如我所知,Windows上没有对Crontab的本机支持,所以您需要使用任务调度器来模拟这种行为。基于php/mysql的解决方案几乎可以在任何web服务器上运行,包括WAMP。