1

我的 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()."'");
}

?>

数据库看起来像这样: Timestamp(ts) 和其他值相同,我做错了什么? 在此处输入图像描述

4

3 回答 3

2

您缺少更新中的条件

UPDATE serverstats SET ts ='".time()."'"

在更新数据库时,它应该有 where 子句 .. 你的 sql 应该类似于\

UPDATE serverstats SET ts ='".time()."' Where = 'your condition'"

如果您错过where了更新子句..那么所有记录都将得到更新..

注意请切换到 mysqli_* 或 PDO 。mysql_* 不再被官方维护。

于 2013-05-14T06:33:44.513 回答
1

看来我没有足够的代表发表评论,但顺便说一句,您正在使用:

$h = date("H", time());

它的形式是 00 到 23,但表格列是 01 - 24。

这可能会成为一个问题,例如在 00:

$last_load = mysql_query("SELECT h".$h." FROM serverstats");
...
于 2013-05-14T07:35:40.013 回答
1

我假设,ts 不是“更新 CURRENT_TIMESTAMP”字段。这样做会更容易,将 ts 的东西留给数据库。

但:

这两种说法

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."'");

因为否则这是读取整个表格并且您只取任意第一行。

于 2013-05-14T06:48:25.847 回答