这是这个问题背后的原因的链接:NOW() for DATETIME InnoDB Transaction 保证?
因此,为了确保具有任意数量查询(例如 20+ 查询)的单个事务在多个表中具有 100% 准确且一致的 NOW() 值,使用 NOW() 分配等效于 DATETIME 的变量的 php 方法是什么(不是当前时间戳)。
一种方法可能是:
<?php
$nowFormat = date('Y-m-d H:i:s');
$sql = "INSERT INTO table SET field='$nowFormat'";
$sql2 = "INSERT INTO table SET field='$nowFormat'";
...
在 MySQL 中执行此操作,因此您根本不涉及 PHP:
select @now := now();
insert into .... values (@now)
select from ... where x=@now
etc....
你可以做:
<?
$now = time();
$sql = "INSERT INTO table SET field=FROM_UNIXTIME($now)";
$sql2 = "INSERT INTO table SET field=FROM_UNIXTIME($now)";
...
这样可以避免任何可能的时区或本地日期格式问题。