2017-08-11 49 views
0

我有一段代碼可以顯示瀏覽器中數據庫查詢的數量(3個)結果和比較結果。它顯示每個數據庫的數字的差異。它的工作原理就是這樣。現在,我要做的就是忘掉網頁,並且每天運行一次php腳本,例如凌晨3點,腳本必須查看前一天的DB數據有什麼不同。如果發現任何差異,使用亞馬遜簡易通知服務,將向所有訂戶發送電子郵件,並提供這些差異的詳細信息。這裏是我的代碼的一部分是從以前的工作的腳本(一個用於瀏覽器)新:檢索前幾天的數據(PHP腳本),並使用Amazon SNS發送數據

if ($total_results) { 
    foreach ($total_results as $cid => $dates) { 

     foreach($dates as $row) {   
     $dbOne_total = $row['dbOne_total']; 
     $dbTwo_total = $row['dbTwo_total']; 
     $dbThree_total = $row['dbThree_total']; 
     $difference = ($dbTwo_total - $dbOne_total); 
     $difference_bill = ($dbThree_total - $dbOne_total); 


     $mismatchFile = fopen("mismatch.txt", "w"); 
     $issue = ""; 
     while($startDate == date('Y-m-d', strtotime('-1 day'))) { 
      if (($difference_bill > 0) || ($difference > 0)) { 
       $issue = ($row["company"] ." ". $row["company_id"]. " ". "dbTwo Difference". " ". $difference. " "."dbThree Difference". " ". $difference_bill); 
       print_r($issue); 
       topic("DATABASE-MISMATCH")->send("List of mismatches between databases", "Issue: $issue/n"); // for ASN 

      } 
     } 
     fwrite($mismatchFile, $issue); 
     fclose($mismatchFile); 
    } 
} 

$的startDate是我使用整個代碼的變量,因爲我有運行需要這個SQL查詢日期以獲取信息。 我質疑這條線:

while($startDate == date('Y-m-d', strtotime('-1 day'))) { 

我不知道的strtotime是最好的選擇(我擔心可能格式問題)。有沒有更好的方法來獲取前一天的數據?

我想知道我是否正確地接近這個問題?我還想知道如何將$ issue變量引入Amazon SNS電子郵件正文中作爲列表的任何建議,還是創建文件並將其作爲附件發送會更好?

我還是一個PHP的新手,所以任何幫助,或正確的方向有幫助的點,將非常感激。

回答

0

while($startDate == date('Y-m-d', strtotime('-1 day')))是一個錯誤的方法。它總是返回true,週期是無限的。

如果你想只是一個時間day before,使用

$date = new \DateTime('now - 1 day'); 
echo $date->format('Y-m-d'); 

如果你需要做一個循環

$date = new \DateTime(); // now here 
for($i = 1; $i <= 10; $i++) { 
    $date->sub(new \DateInterval('P' . $i . 'D'); // $i days before, $i>0 
} 
相關問題