如何在24小时后更改mysql数据库中的值? 用户是否需要访问网站才能运行查询? 例如,我有一个名为“user-rank”的列,它的值为“10”,我希望它在24小时后为“20”......
答案 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系统上执行此操作的方法。