3

我正在创建一个对象的实例并同时在 MySQL 数据库上使用 INSERT 查询。数据库中的表有一个名为 的字段modified,每当插入/更改行时,该字段就会自动更新。

当调用我的类的构造函数时,它将对象的属性设置为查询中使用的属性。我的问题是,我是否必须SELECT对新插入/更新的行运行查询以获取其时间戳,或者我可以安全地假设 PHP 的time()函数会返回相同的值?

例如:

<?php
// Inside the __construct method of a class
static::query('
   INSERT INTO `table` (
      `name`,
      `content`
   )
   VALUES
      (
         "name",
         "content"
      );
');
   // During insertion, `modified` column is set to NOW()
$this->name = 'name';
$this->content = 'content';
$this->modified = time();
   // Can I count on this being reflected properly?
?>

我能想到的只有两种可能性可以否定这一点:(1)数据库位于本地时间不同的服务器上;(2) 查询和函数调用之间的时间流逝time()(我严重怀疑这甚至会产生 1 秒的差异......)。

是否值得花费SELECT查询来获取更新时间,或者我是否应该坚持调用该time()函数并冒着下次选择该行时的风险,该modified值可能与在我的应用程序中实例化时不同?

4

2 回答 2

1

不,它们不一样,因为服务器的时间可能不同(可能只是一些毫秒,但可能是整个时区),并且处理过程中总是存在(小但存在)延迟。

使用选择。

于 2013-08-20T23:51:21.923 回答
1

不。

PHP 和 MySQL 可以在两个不同的服务器上运行,即使它们在同一台服务器上运行,也可以为其中一个或另一个或两者配置时区。选择一个单一的时间源,PHP 或 MySQL,然后独占使用它。

此外,许多托管公司要么不知道或不太关心他们的时钟,以知道他们往往会在没有正确配置 ntpd 的情况下浮动。有些服务器每周浮动几秒钟,有些则每天浮动几分钟。

于 2013-08-20T23:51:32.677 回答