我正在尝试检查现在的时间是否比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时间进行比较。
答案 0 :(得分: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 ---^
答案 1 :(得分:1)
以下是我如何制作依赖数据库时间的计时器:
$timeToWait = 120; // 2 minutes
$result_set = .....;
if(time() - $result_set['time'] > $timeToWait) {
// do something
}
答案 2 :(得分:1)
另一种方法是只选择您需要的行(如果您不打算在代码中使用其他行):
$query = "SELECT
event_name, event_date, initiator, min_level, max_level
FROM
DD_events
WHERE event_date <= NOW()
";
这会减少你的PHP代码和所需的资源。
答案 3 :(得分:0)
您可以使用DateDiff
,Date_Sub
函数来检查两个日期是否会产生差异,还是为零或零。
但这只能在MYSQL查询中定义。
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
列。