1

現在、SQL行のDATETIMEよりも新しい時刻を確認しようとしています。これは私の現在のコードです:

<?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の時刻と比較しようとしました。

4

4 に答える 4

3

選択で関数を適用しUNIX_TIMESTAMPますが、エイリアスは何もしません。UNIX_TIMESTAMP(event_date)したがって、結果セットには、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 ---^
于 2012-12-31T18:07:24.207 に答える
1

データベースの時間に依存するタイマーを作成する方法は次のとおりです。

$timeToWait = 120; // 2 minutes
$result_set = .....;
if(time() - $result_set['time'] > $timeToWait) {
    // do something
}
于 2012-12-31T18:06:39.050 に答える
1

別の方法は、必要な行を選択することです(コードで他の行を使用しない場合)。

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

それはあなたのphpコードと必要なリソースを減らすでしょう。

于 2012-12-31T18:11:24.273 に答える
0

DateDiff、関数を使用して、Date_Sub両方の日付が差になるか、nullまたはゼロになるかを確認できます。

ただし、それはwitinMYSQLクエリを定義することしかできません。

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列を検証できます。

于 2012-12-31T18:06:48.960 に答える