Почему скрипт все время сохраняет одни и те же данные?

У меня проблема с моим 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) и другие значения одинаковы, что я сделал неправильно?введите описание изображения здесь

3 ответа

Решение

Вы пропустили, где условие в обновлении

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

При обновлении базы данных она должна иметь предложение where.. ваш sql должен быть что-то вроде \

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

Если ты скучаешь where в условии обновления.. тогда все записи будут обновлены..

ПРИМЕЧАНИЕ, пожалуйста, переключитесь на mysqli_* или PDO . mysql_* больше официально не поддерживается.

Кажется, у меня недостаточно представителей, чтобы оставлять комментарии, но в качестве отступления вы используете:

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

Который имеет форму от 00 до 23, но столбцы таблицы - от 01 до 24.

Это может стать проблемой, например, в 00:

$last_load = mysql_query("SELECT h".$h." FROM serverstats");
...

Я предполагаю, что ts не является полем "при обновлении CURRENT_TIMESTAMP". Иметь это будет проще, оставляя все это в БД.

НО:

эти два заявления

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

так как в противном случае это чтение всей таблицы, и вы берете только произвольную первую строку.

Другие вопросы по тегам