2012-12-31 79 views
1

我正在嘗試檢查時間是否更新,然後從SQL行更新DATETIME。這是我現在的代碼:在php中檢查當前時間已通過SQL時間

<?php 
require('common.php'); 

$query = "SELECT 
       event_name, UNIX_TIMESTAMP(event_date) AS event_time, initiator, min_level, max_level 
       FROM 
       DD_events 
      WHERE 
      event_date <= NOW() 
      "; 
try{ 
    $stmt = $db->prepare($query); 
    $result = $stmt->execute(); 
} 
catch(PDOException $ex){ 
    die("Failed to run query: " . $ex->getMessage()); 
} 
$chk = $stmt->fetchall(); 

//Loop through each row 
foreach ($chk as $chks) { 
print_r($chks['event_time']); echo "<br>"; 
    // If it is, create query to make the next event 
    $query = "INSERT INTO 
       DD_events (event_name, event_date, initiator, min_level, max_level) 
       VALUES 
       (:name, :event_date, 0, :min_lvl, :max_lvl) 
      "; 
    $query_params = array(
        ':name' => $chks['event_name'], 
        ':event_date' => $chks['event_time'], 
        ':min_lvl' => $chks['min_level'], 
        ':max_lvl' => $chks['max_level'] 
        ); 
    try 
    { 
     // These two statements run the query against your database table. 
     $stmt = $db->prepare($query); 
     $stmt->execute($query_params); 
    } 
    catch(PDOException $ex) 
    { 
     // Note: On a production website, you should not output $ex->getMessage(). 
     // It may provide an attacker with helpful information about your code. 
     die("Failed to run query: " . $ex->getMessage()); 
    } 
} 

即使我知道應該會出現結果,結果總是變成空的。

我的目標是檢查一個事件是否已經過去。如果它執行了代碼。

我知道PHP時間與SQL時間不同,這就是爲什麼我嘗試使用UNIX_TIMESTAMP()函數嘗試將其與PHP時間進行比較的原因。

回答

1

另一種是隻選擇你需要(如果你不打算使用其他的人在你的代碼)行:

$query = "SELECT 
      event_name, event_date, initiator, min_level, max_level 
      FROM 
      DD_events 
      WHERE event_date <= NOW() 
      "; 

這會降低你的PHP代碼和所需資源。

+1

我會嘗試。這肯定會讓事情變得更容易。 – Matt

+0

它的工作原理。但現在輸入的時間是0000-00-00 00:00:00,而不是抓取的日期。 – Matt

+0

@Matt什麼時候進入哪裏?如果需要,您仍然可以使用MikeB的答案作爲結果集中的列選擇時間戳。 – jeroen

1

以下是我做的是依靠時間從數據庫中定時器

$timeToWait = 120; // 2 minutes 
$result_set = .....; 
if(time() - $result_set['time'] > $timeToWait) { 
    // do something 
} 
0

你可以使用DateDiffDate_Sub功能檢查,如果這兩個日期導致差或零或零。

雖然只能在MYSQL Query中定義,

SELECT event_name, 
UNIX_TIMESTAMP(event_date) MYSQLDtTime, 
DateDiff(time(), UNIX_TIMESTAMP(event_date)) as timdiff, 
initiator, 
min_level, 
max_level 
FROM DD_events; 

因此您可以驗證timediff列。

3

您在選擇中應用UNIX_TIMESTAMP函數,但不會將其別名混淆。因此,您的結果集包括event_date和一個數字鍵,表示您從不訪問的值UNIX_TIMESTAMP(event_date)

SELECT event_name, UNIX_TIMESTAMP(event_date) event_date, initiator, min_level, max_level FROM DD_events 
#   Alias the result of the function ---^ 
+0

謝謝。這有幫助。 – Matt

相關問題