PHP / mySQL获得x秒的时差

时间:2017-05-25 17:05:49

标签: php mysql

我的目标是在两个不同的时间之间获得时间差,一个来自我的数据库,一个来自客户端的PHP时间戳,并进行比较。然后,如果时差小于或等于10秒,那么做一些事情。

我的代码不起作用,如下所示。

date_default_timezone_set('America/Chicago');
$timestamp = date('Y-m-d H:i:s');

$sqlcheck = $dbh->prepare("SELECT timestem FROM mytable WHERE UNIX_TIMESTAMP(timestem) - UNIX_TIMESTAMP('".$timestamp."') <= 10");
$sqlcheck->execute();
    if ($sqlcheck === ''){
        echo "Yes";
    }
    else {
        echo "No";
    } 

timestem是来自mySQL的DATETIME值。 $sqlcheck用于描述查询的结果。如果查询什么都不返回,那么echo Yes。如果它从我的查询中返回一些内容,那么echo No

在解释中没有太复杂,我的最终目标是检查自允许客户端执行更新之前数据库操作以来的时间。

2 个答案:

答案 0 :(得分:2)

您应该使用MySQL内置的TIMESTAMPDIFF函数:

$sqlcheck = $dbh->prepare('SELECT timestem FROM mytable WHERE TIMESTAMPDIFF(SECOND, timestem, $1) <= 10');
$result = $sqlcheck->execute([$timestamp]);

请注意,我提供$timestamp作为参数化参数,而不是连接字符串。

要检查结果,您不能只检查字符串相等性。而是在结果对象上使用fetchColumn

if ($timestem = $result->fetchColumn()) {
    echo "YES";
    // You can also use the value of `$timestem` here.
} else {
    echo "NO";
}

请注意,这假设只有一行。对于多行,您需要一个循环。请注意,只返回与条件匹配的行,因此如果使用循环,则永远不会看到任何NO输出。

答案 1 :(得分:1)

您可以轻松地在PHP中进行检查(这可能会更直接)

$sqlcheck = $dbh->prepare( "SELECT timestem FROM mytable" );
$sqlcheck->execute();

// You missed this step
$timestem = $sqlcheck->fetchColumn();

if ( time() - strtotime( $timestem ) > 10 )
    print 'yes';
else
    print 'no';

一些注意事项:

  1. 在您的代码中,您实际上并没有从数据库中获取值。您在条件
  2. 中使用了结果对象
  3. 您的代码隐含地假设您的表中只有一条记录。这可能不是真的:你需要一个where条件
  4. 您必须非常确定所有时间戳都在同一时区
  5. 这只适用于使用PDO而非mysqli的情况。我无法区分你的例子,但一个微妙的区别是PDO允许你使用一个没有绑定参数的准备和执行,但mysqli赢了。