为什么脚本会一直保存相同的数据?

时间:2013-05-14 06:28:46

标签: php mysql cron crontab

我的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)和其他值是一样的,我做错了什么? enter image description here

3 个答案:

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