[英]Php loop and writing to MySql db
我在使用以下腳本時遇到問題。 它使用上一遍的值更新“狀態”字段為“活動”的每個選定字段。 我只希望它更新與id字段相對應的字段。
LE。 我有多個記錄,但是只有其中一些處於活動狀態。
ID 1 state ACTIVE
ID 2 state ACTIVE
ID 3 state DONE
現在,腳本在狀態和速度字段中為ID 1和2寫入相同的值。我希望它只為每個ID寫入相應的值。
希望這能清除它。
$result = mysql_query("SELECT id, filename, status, totalsize, procent, pid, log_no FROM plow WHERE state = 'Active'");
while (($db_field = mysql_fetch_array($result)) != false) {
$cfs = filesize($init_loc."/".$db_field['filename']);
$procentage= ($cfs * '100')/$db_field['totalsize'];
$out1="2";
$pid2=$out1 + $db_field['pid'];
$command = exec("ps ax | grep -v grep | grep -c ".$pid2, $out);
exec($command, $out);
if ($out[0] == 1 && $procentage <= 99 ) {
$fp = fopen($init_loc."/Logs/log".$db_field['log_no'], 'r');
$cursor = -1;
fseek($fp, $cursor, SEEK_END);
$char = fgetc($fp);
while ($char === "\n" || $char === "\r") {
fseek($fp, $cursor--, SEEK_END);
$char = fgetc($fp);
}
while ($char !== false && $char !== "\n" && $char !== "\r") {
$line = $char . $line;
fseek($fp, $cursor--, SEEK_END);
$char = fgetc($fp);
}
$av_speed=ereg_replace("[^0-9]", "", substr($line,-6));
mysql_query("UPDATE plow SET currentsize = '$cfs', procent = '$procentage', av_speed = '$av_speed' WHERE id = '".$db_field['id']."'") or die ('Error: ' . mysql_error());
$needle1='Waiting';
$needle2='failed';
$needle3='no module';
$needle4='retry after a safety wait';
$search1=strpos($line, $needle1);
$search2=strpos($line, $needle2);
$search3=strpos($line, $needle3);
$search4=strpos($line, $needle4);
if($search1 !== false)
{
$status=ereg_replace("[^0-9]", "", $line);
mysql_query("UPDATE plow SET status = '$status' WHERE id = '".$db_field['id']."'") or die ('Error: ' . mysql_error());
}
elseif ($search2 !== false)
{
$status="2";
mysql_query("UPDATE plow SET status = '$status' WHERE id = '".$db_field['id']."'") or die ('Error: ' . mysql_error());
}
elseif ($search3 !== false)
{
$status="2";
mysql_query("UPDATE plow SET status = '$status' WHERE id = '".$db_field['id']."'") or die ('Error: ' . mysql_error());
}
elseif ($search4 !== false)
{
$status="Retrying ...";
mysql_query("UPDATE plow SET status = '$status' WHERE id = '".$db_field['id']."'") or die ('Error: ' . mysql_error());
}
else
{
$status="3";
mysql_query("UPDATE plow SET status = '$status' WHERE id = '".$db_field['id']."'") or die ('Error: ' . mysql_error());
}
unset($search1);
unset($search2);
unset($search3);
unset($search4);
unset($av_speed);
unset($status);
}
else if ($out[0] == 0 && $procentage == 100 ) {
mysql_query("UPDATE plow SET currentsize = '$cfs', procent = '$procentage', status= '1', state = 'Done' WHERE id = '".$db_field['id']."'") or die ('Error: ' . mysql_error());
unset($status);
}
else {
$status="Unknown error";
mysql_query("UPDATE plow SET status= '$status' WHERE id = '".$db_field['id']."'") or die ('Error: ' . mysql_error());
}
}
mysql_close();
錯誤在於$ status的值。 我使用您的原始計算做了一個簡單的腳本,它會按預期更新其他值。
//Define the SQL
$query = "SELECT id, filename, totalsize FROM plow WHERE state = 'ACTIVE'";
$result = mysql_query($query);
if (mysql_affected_rows() > 0) {
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
//Do some simple calculation before updating the database
$id = $row['id']; // Set the id
$cfs = filesize($init_loc."/".$row['filename']); //Get file size
$procentage= ($cfs * 100)/$row['totalsize']; // Percentage
echo 'Filesize: ' . $cfs . '<br />' . 'Percentage: '. $procentage . '<br />';
$update = "UPDATE plow SET procent = '$procentage' WHERE id = '$id'";
$updateResult = mysql_query($update);
}
} //End check for affected rows
因此,這意味着必須存在一些使兩個ID的狀態保持不變的東西。 將狀態變量跟蹤到該值的起源,並查看是否可以弄清楚它們為什么是相同的值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.