php
  • mysql
  • database
  • datetime
  • mysqli
  • 2011-09-01 69 views 3 likes 
    3

    成功注册用户后,默认情况下,我的MySQL数据库表将0000-00-00 00:00:00放入lastlogin_datelastlogout_date字段。这两个字段的类型是datetime。在我的php代码中,我正在检查用户是否第一次进入网站检查数据库表字段(日期时间)是否为空

    $lastlogin = $db->query("SELECT `lastlogin_date` FROM `users` WHERE `id`='$_SESSION[id]'"); 
        $row = $lastlogin->fetch_array(MYSQLI_BOTH); 
        $lastlogin=$row['lastlogin_date']; 
        if(empty($lastlogin)) 
        { do something} 
    

    但是,似乎在这种情况下,empty不起作用。如何检查lastlogin_date字段是否为空?如果($ lastlogin =='0000-00-00 00:00:00')??

    +0

    'if($ lastlogin =='0000-00-00 00:00:00')'不是一个错误的选项 – tttony

    回答

    6

    0000-00-00 00:00:00是一个值。如果你不想放任何价值,你应该存储NULL,这会更有意义。 NULL是缺少值

    话虽这么说,我认为最好的办法是选择,而不是你列一个布尔值:

    -- (lastlogin_date is NULL) if you change your table structure 
    SELECT (lastlogin_date = '0000-00-00 00:00:00') as has_logged_in 
        FROM users 
    WHERE id = ?; 
    

    当你取你的查询,你可以使用$row['has_logged_in'],这是一个布尔值。

    +0

    我听说“null”是越野车。更好地使用空字符串或默认的“0”,但实际上我不明白他们之间的差异和利弊 –

    +0

    如何是NULL的马车?这是完全没有意义的。正如我所说的,NULL只需要1个_bit_,而一个值可能需要几个字节,而NULL则是缺少值。使用任意值还可以使查询像“SELECT COUNT(some_col)”完全错误。当后者更加适用时,使用值而不是NULL是没有意义的。 –

    +0

    你在世界的哪个地方听说NULL是越野车?大声笑!我真的很想听到更多关于这个的信息。 :) @Vincent指出,NULL表示“没有价值”。这怎么可能是_buggy_? – Herbert

    相关问题