我正在开发一个 PHP 应用程序,它以 MySQL 数据库为中心,我希望自动记录用户的注册时间。
- 哪个会更好?使用 PHP 的日期函数或 MySQL 是否有当前时间戳选项(我认为有)。
- 如果 MySQL 更好(在准确性方面),那么我将如何实现它?表结构是什么?
- 如果 PHP 更好(在准确性方面),那么最直接的方法是什么?
谢谢你的帮助!
查看MySQL DateTime参考。
我建议UTC_TIMESTAMP()
在 MySQL 中使用,然后您将时区排除在外,并且非常准确。
mysql> SELECT UTC_TIMESTAMP(), UTC_TIMESTAMP() + 0;
-> '2003-08-14 18:08:04', 20030814180804.000000
如果将其用作字符串,则会返回日期格式,如果将其用作数字选择器,则会返回数值。
以下 MYSQL 代码将执行此操作:
INSERT INTO table_name (date_field) VALUE (now())
就准确性而言,MYSQL 将最接近插入时间,但 PHP 和 MYSQL 之间的差异是如此之小,以至于不会产生影响。
您可以在插入记录时使用 MySQL 函数UNIX_TIMESTAMP() 。
PHP 和 MySQL 都将使用系统时钟中的时间,因此无论您使用哪个结果都应该是相同的。时间戳也以 UTC 格式存储,因此可以轻松切换到用户的时区。
IMO,您使用哪个(PHP 或 MySQL 时间)没有区别,但我个人会将注册时间INT
作为时间戳存储在列中。
插入可能如下所示:
INSERT INTO `user`
(id, username, registrationTime)
VALUES
(NULL, 'rgbc', UNIX_TIMESTAMP());
我会按顺序回答这些。
我总是推荐使用 MySQL 的 time 函数(即 NOW()),因为它可以使代码更简洁、更高效。尽管性能差异很小,但在 INSERT 查询中使用 NOW() 比使用 PHP 的 date() 函数设置变量然后在查询中稍后调用它更简单。
如果您寻求的是准确性,请为您的数据库使用 InnoDB 引擎。一个示例结构是:id (int auto_increment)、name (tinytext)、password (tinytext)、salt (tinytext)、registerd_date (DATETIME)。密码和盐列用于使用安全的散列密码(类似于 SHA512)。
在我看来,PHP 可能是最简单的。最直接的方法是做一个常规的注册表格,然后使用 NOW() 记录注册发生的日期和时间。
祝你好运,
大卫