【问题标题】:Check db table field (datetime) if it's empty or not检查数据库表字段(日期时间)是否为空
【发布时间】:2011-11-08 03:15:40
【问题描述】:

用户注册成功后,我的 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} 

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

【问题讨论】:

  • if ($lastlogin == '0000-00-00 00:00:00') 是不错的选择

标签: php mysql database datetime mysqli


【解决方案1】:

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'],它是一个布尔值。

【讨论】:

  • 我听说“null”有问题。最好使用空字符串或默认“0”,但实际上我不明白它们之间的区别和优点缺点
  • NULL 有什么问题?这是完全没有意义的。 NULL 只占用 1 个 bit 而一个值最多可以占用几个字节,正如我所说,NULL 是缺少值。使用任意值也会使像SELECT COUNT(some_col) 这样的查询完全错误。当后者更合适时,使用值而不是 NULL 是没有意义的。
  • 您从哪里听说 NULL 是错误的?哈哈!我真的很想听听更多关于这方面的信息。 :) 正如@Vincent 指出的那样,NULL 表示“没有价值”。这怎么可能是buggy
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多