我正在创建一个对象的实例,同时在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()
函数并冒险在下次选择行时冒{{1}在我的应用程序中,value可能与实例化时的值不同吗?
答案 0 :(得分:1)
不,它们不一样,因为服务器的时间可能不同(可能只有几毫秒但可能是整个时区)并且处理中总是存在(很小但存在)延迟。
使用SELECT。
答案 1 :(得分:1)
没有
PHP和MySQL可以在两个不同的服务器上运行,即使它们在同一台服务器上运行,也可以为一个或另一个或两者微处理时区。选择一个时间源,PHP或MySQL,然后专门使用它。
此外,许多托管公司要么不知道或不关心他们的时钟,要知道他们往往没有正确配置ntpd而浮动。有些服务器每周漂浮几秒钟,其他服务器每天漂浮几分钟。