在MySQLi PHP中获取NOW()的值

3
假设您的Web服务器与数据库服务器分离。它们的时钟可能没有正确同步(精确到毫秒等级)。
您执行插入操作,例如 "INSERT INTO sometable (VALUE, VALUE2, DATETIME) VALUES ("something", "something else", NOW());"
是否有办法将MySQL生成的时间戳返回给PHP?就像使用 $sqlObject->insert_id获取最后插入行的AUTO_INCREMENT值一样。
编辑:我意识到我可以只使用 insert_id 并运行 SELECT 来获取时间戳,但这需要我再运行一个语句。我想知道是否可能在单个语句中完成。

不太确定将值返回到PHP如何有所帮助。您可以计算出差异,但接下来呢?只需将两台机器同步到NTP服务器即可。 - Jonnix
您可以编写存储过程,将数据插入表中,然后返回最后插入的记录。 - Abhishek Ginani
2
如果您决定以这种方式做,而不是让 MySQL 生成该值,为什么不让 PHP 生成并传递该值呢?然后您就可以确切地知道输入的日期时间是什么,不需要从插入语句中返回任何值。(其中 value = datetime)。 - Jonnix
1
正如@RonaldSwets所提到的,我认为在mysql中唯一的方法是检索行,因为SP不可用,并且它没有实现类似于PostgreSQL的RETURNING。 - Jonnix
我想我只需要稍微重构一下,使用 PHP 生成时间戳。 - nickdnk
显示剩余7条评论
1个回答

0

你不能直接获取值,但可以通过两种方式实现。

1)进行选择查询,例如select now() as cur_time,并获取其值并在第二个查询中使用。[可能会得到不同的时间,因此建议不要选择此解决方案,最好选择选项2。]

2)插入数据后获取其ID,然后进行查询并获取插入的日期时间。

如果你的PHP和MYSQL服务器日期时间相同,则可以使用php的date函数来获取当前日期/时间。


你的第一个建议在边缘情况下可能会产生两个不同的结果,因为时间戳可能会从一个NOW()增加到下一个。 - nickdnk
是的,没错,这就是为什么我也不建议它。让我更新我的答案并添加一个红色警告。 - NIlay Mehta

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接