我的目标是在两个不同的时间之间获得时间差,一个来自我的数据库,一个来自客户端的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
。
在解释中没有太复杂,我的最终目标是检查自允许客户端执行更新之前数据库操作以来的时间。
答案 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';
一些注意事项: