2011-03-22 44 views
3

我有我的查詢問題。在數據庫問題的mysqli查詢 - 時間戳

字段(userid, code, timestamp

我想在此代碼,以驗證是否存在一個用戶標識和相應的代碼,但已插入不到一天,否則顯示一消息「鏈接過期」

我的代碼運行良好,沒有這一行TIMESTAMPDIFF(DAY, CURTIME(), timestamp) < 1")

目前沒有返回與時間戳條件

"select userid, code from password_reset where userid=? and code=? and TIMESTAMPDIFF(DAY, CURTIME(), timestamp) < 1" 

有一個在這個代碼中的一些問題?基本上,我的想法是:如果時間戳已超過一天,返回一個錯誤給用戶。

我的腳本(問題是隻有在查詢時間戳條件)

if (checkBd ($sql, $db, $user, $codePass)){ 
      $user = (int)mysqli_real_escape_string($db, $userid); 
      $codePass = mysqli_real_escape_string($db, $_GET['code']); 

      ($sql = $db->prepare("select userid, code from password_reset where userid=? and code=? and TIMESTAMPDIFF(DAY, CURTIME(), timestamp) < 1")); 

      $sql->bind_param('ss', $user, $codePass); 

      $sql->execute(); 

      $sql->bind_result($user, $codePass); 

      if ($sql->fetch()) { 
        $_SESSION['u_name']= sha1($user); 
        header("location: updatePass.php"); 
        return true; 
      } 

    } 
      $sql->close(); 
    $db->close(); 
+0

這是什麼問題?是服務器時間偏移的問題? – zod 2011-03-22 15:45:55

回答

3

你想傳遞一個DATETIME價值,而不僅僅是一個TIME,使用NOW()CURTIME()。 (如果你想忽略一天的時間,然後使用CURDATE()

而且,扭轉參數順序,因爲該函數datetime2 - datetime1

documentation瞭解更多詳情。

TIMESTAMPDIFF(DAY, `timestamp`, NOW()) < 1 

使用保留字作爲列名也不會幫助。

+0

作品像一個魅力,謝謝(我接受你的答案,因爲更完整) – anvd 2011-03-22 15:47:41

1

CURTIME()回報CURENT時間(無日期)。我想通過TIMESTAMPDIFF那裏使用的日期是「MIN_DATE」,請嘗試使用替代CURDATE()

+0

是的,你的解決方案也解決了這個問題 – anvd 2011-03-22 15:48:50