Почему скрипт все время сохраняет одни и те же данные?
У меня проблема с моим 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."'");
так как в противном случае это чтение всей таблицы, и вы берете только произвольную первую строку.