PHP/mySQL获得x秒的时差

PHP/mySQL获得x秒的时差,php,mysql,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

我的目标是获得两个不同时间之间的时差,一个来自我的数据库,另一个来自客户端的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";
    } 
date\u default\u timezone\u set('America/Chicago');
$timestamp=日期('Y-m-d H:i:s');

$sqlcheck=$dbh->prepare(“从mytable中选择timestem,其中UNIX_TIMESTAMP(timestem)-UNIX_TIMESTAMP(““.”$TIMESTAMP.””)您可以同样轻松地在PHP中执行检查(这可能会更直接一些)

一些注意事项:

  • 在您的代码中,您实际上没有从数据库中获取值。您在条件语句中使用了result对象
  • 您的代码隐式地假设表中只有一条记录。这可能不是真的:您将需要where条件
  • 你必须非常确定你所有的时间戳都在同一个时区
  • 这只在使用PDO而不是mysqli的情况下才有效。我无法从您的示例中看出区别,但一个微妙的区别是PDO允许您使用无绑定参数的准备和执行,但mysqli不会

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

    一些注意事项:

  • 在您的代码中,您实际上没有从数据库中获取值。您在条件语句中使用了result对象
  • 您的代码隐式地假设表中只有一条记录。这可能不是真的:您将需要where条件
  • 你必须非常确定你所有的时间戳都在同一个时区
  • 这只在使用PDO而不是mysqli的情况下才有效。我无法从您的示例中看出区别,但一个微妙的区别是PDO允许您使用无绑定参数的准备和执行,但mysqli不会

  • 您应该使用MySQL内置函数:

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

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

    您应该使用MySQL内置函数:

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

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

    Re您的观点4:问题明确指出
    timetem
    DATETIME
    字段。谢谢,我已经更新了我的answer(并放在另一个注释中)Re你的观点4:问题明确地说,
    timestem
    是一个
    DATETIME
    字段。谢谢,我已经更新了我的答案(并放在另一个注释中)。为什么
    $sqlcheck
    会突然变成空字符串?为什么
    $sqlcheck
    会突然变成空字符串?
    if ($timestem = $result->fetchColumn()) {
        echo "YES";
        // You can also use the value of `$timestem` here.
    } else {
        echo "NO";
    }