2

我正在开发一个 PHP 应用程序,它以 MySQL 数据库为中心,我希望自动记录用户的注册时间。

  • 哪个会更好?使用 PHP 的日期函数或 MySQL 是否有当前时间戳选项(我认为有)。
  • 如果 MySQL 更好(在准确性方面),那么我将如何实现它?表结构是什么?
  • 如果 PHP 更好(在准确性方面),那么最直接的方法是什么?

谢谢你的帮助!

4

4 回答 4

2

查看MySQL DateTime参考。

我建议UTC_TIMESTAMP()在 MySQL 中使用,然后您将时区排除在外,并且非常准确。

mysql> SELECT UTC_TIMESTAMP(), UTC_TIMESTAMP() + 0;
    -> '2003-08-14 18:08:04', 20030814180804.000000

如果将其用作字符串,则会返回日期格式,如果将其用作数字选择器,则会返回数值。

于 2012-07-23T21:55:20.233 回答
1

以下 MYSQL 代码将执行此操作:

INSERT INTO table_name (date_field) VALUE (now())

就准确性而言,MYSQL 将最接近插入时间,但 PHP 和 MYSQL 之间的差异是如此之小,以至于不会产生影响。

于 2012-07-23T21:55:15.893 回答
1

您可以在插入记录时使用 MySQL 函数UNIX_TIMESTAMP() 。

PHP 和 MySQL 都将使用系统时钟中的时间,因此无论您使用哪个结果都应该是相同的。时间戳也以 UTC 格式存储,因此可以轻松切换到用户的时区。

IMO,您使用哪个(PHP 或 MySQL 时间)没有区别,但我个人会将注册时间INT作为时间戳存储在列中。

插入可能如下所示:

INSERT INTO `user`
(id, username, registrationTime)
VALUES
(NULL, 'rgbc', UNIX_TIMESTAMP());
于 2012-07-23T21:56:30.153 回答
1

我会按顺序回答这些。

  • 我总是推荐使用 MySQL 的 time 函数(即 NOW()),因为它可以使代码更简洁、更高效。尽管性能差异很小,但在 INSERT 查询中使用 NOW() 比使用 PHP 的 date() 函数设置变量然后在查询中稍后调用它更简单。

  • 如果您寻求的是准确性,请为您的数据库使用 InnoDB 引擎。一个示例结构是:id (int auto_increment)、name (tinytext)、password (tinytext)、salt (tinytext)、registerd_date (DATETIME)。密码和盐列用于使用安全的散列密码(类似于 SHA512)。

  • 在我看来,PHP 可能是最简单的。最直接的方法是做一个常规的注册表格,然后使用 NOW() 记录注册发生的日期和时间。

祝你好运,

大卫

于 2012-07-23T21:57:47.907 回答