我的php脚本有问题,系统每分钟运行一次。
我的php脚本是这样的:
<?php
$y = date("Y", time());
$m = date("m", time());
$d = date("d", time());
$h = date("H", time());
mysql_connect("localhost", "root", "");
mysql_select_db("dashboard");
$check_date = mysql_query("SELECT year,month,day FROM serverstats WHERE year='".$y."' && month='".$m."' && day='".$d."'");
if(mysql_num_rows($check_date)==0) {
mysql_query("INSERT INTO serverstats (year,month,day,h01,h02,h03,h04,h05,h06,h07,h08,h09,h10,h11,h12,h13,h14,h15,h16,h17,h18,h19,h20,h21,h22,h23,h24)
VALUES (
'".$y."', '".$m."', '".$d."', NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL
);
") or die(mysql_error());
} else {
$load = file_get_contents("/proc/loadavg");
$load = explode( ' ', $load );
$total_load = $load[0] + $load[1] + $load[2];
$last_load = mysql_query("SELECT h".$h." FROM serverstats");
$daten = mysql_fetch_array($last_load);
$total = $daten["h".$h.""]+$total_load;
mysql_query("UPDATE serverstats SET h".$h."='".$total."'");
mysql_query("UPDATE serverstats SET ts ='".time()."'");
}
?>
数据库看起来像这样: 时间戳(ts)和其他值是一样的,我做错了什么?
答案 0 :(得分:2)
您缺少更新中的条件
UPDATE serverstats SET ts ='".time()."'"
在更新数据库时,它应该有where子句..你的sql应该是\
UPDATE serverstats SET ts ='".time()."' Where = 'your condition'"
如果你错过了更新子句中的where
..则所有记录都会更新..
注意请切换到mysqli_ *或PDO。 mysql_ *不再正式维护。
答案 1 :(得分:1)
我假设,ts不是“更新CURRENT_TIMESTAMP”字段。这样做会更容易,将ts内容留给DB。
BUT:
这两个陈述
mysql_query("UPDATE serverstats SET h".$h."='".$total."'");
mysql_query("UPDATE serverstats SET ts ='".time()."'");
是否会更新表格中的所有记录 - 缺少where子句。
试试这个:
mysql_query("UPDATE serverstats SET h".$h."='".$total."', ts ='".time()."' ".
" WHERE year='".$y."' && month='".$m."'` && day='".$d."'");
显然
$last_load = mysql_query("SELECT h".$h." FROM serverstats " .
" WHERE year='".$y."' && month='".$m."'` && day='".$d."'");
因为否则这是读取整个表格而你只占用第一行。
答案 2 :(得分:1)
似乎我没有足够的代表留下评论但是除此之外,你正在使用:
$h = date("H", time());
其形式为00至23,但表格列为01 - 24.
这可能会成为例如00:
的问题$last_load = mysql_query("SELECT h".$h." FROM serverstats");
...