2013-03-22 115 views
0

我有一个表,它是登录,表有两个属性,userId和loginDate 我想要做什么是当用户登录到我的网站是要显示他他的最后登录日期如何在mysql中更新值如果值不为空

如果这是用户第一次登录,意味着loginDate值为空,我只想插入当前日期,并且用户已经登录然后我想更新日期。我将如何做到这一点?到目前为止,我现在有这个权利

//.. 
    $userId = $_POST['the_user']; 
    $query = "SELECT * 
      FROM login"; 
      $result = mysqli_query($db, $query); //we make the query 

    if(empty($row[1]){ // THIS IS WHERE I INSERT A DATE IF THIS IS THE FIRST 
          // TIME A USER LOGS IN 
     $query = "INSERT INTO login(userId,loginDate) 
        VALUES ('$userId',CURDATE())"; 
     $result = mysqli_query($db, $query); //we make the query 
     } 
      else if{ // THIS IS WHERE I WOULD DO MY UPDATE 



      } 
+0

使用它像下面在一份声明中,你* *插入对数的新纪录,或者是你* *更新存储在日志中的价值?我建议您创建一个表来存储*每个单独的登录名*,然后使用SQL检索上次登录日期 – Barranka 2013-03-22 19:04:17

+0

您的选择查询不完整,您不会按$ userid过滤。然后关于更新,只需运行更新查询,它应该没问题。 – Sebas 2013-03-22 19:04:51

回答

1

事情是这样的......

INSERT INTO login (userId, loginDate) VALUES ('$userId', CURDATE()) 
    ON DUPLICATE KEY UPDATE loginDate = CURDATE() 

Documentation

你还需要使用绑定参数,以防止对SQL注入。

0

这样的事情?而不会改变你已经做

else { 
    mysqli_query($db, "update login set loginDate = curdate() where userId = '$userId'"); 
} 

顺便说一句,保护自己免受SQL注入攻击你真的应该用准备好的语句,而不是在字符串变量代换。

0
COALESCE 

是解决方案。它就像Oracle的NVL一样。 可以使用参数

UPDATE 
    tbl_cccustomerinfo 
SET 
    customerAddress = COALESCE(?,customerAddress), 
    customerName = COALESCE(?,customerName), 
    description = COALESCE(?,description) 
WHERE 
    contactNumber=?