簡體   English   中英

PHP / mySQL的時間差為x秒

[英]PHP/mySQL get time difference by x seconds

我的目標是獲取兩個不同時間之間的時差,其中一個來自我的數據庫,另一個來自客戶端的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

不必費神費力地解釋一下,我的最終目標是檢查自允許客戶端執行更新之前的數據庫操作以來已經有多長時間了。

您應該使用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輸出。

您可以輕松地在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. 您的代碼隱式假定表中只有一條記錄。 這可能不正確:您將需要一個where條件
  3. 您必須非常確定所有時間戳都在同一時區中
  4. 僅在使用PDO而不是mysqli時才有效。 我不能說出與您的示例的區別,但是細微的區別是PDO允許您使用沒有綁定參數的prepare和execute,但是mysqli不會。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM