Получите DATETIME в php и отправьте его в MySQL для согласованности транзакций

Вот ссылка на причину этого вопроса: NOW() для гарантированной транзакции DATETIME InnoDB?

Таким образом, чтобы гарантировать, что одна транзакция с любым количеством запросов (например, 20+ запросов) имеет 100% точное и согласованное значение NOW() в нескольких таблицах, какова php способ назначить переменной эквивалент DATETIME, используя NOW() (не текущий TIMESTAMP).


person Maverick    schedule 12.04.2012    source источник


Ответы (3)


Один из способов может быть:

<?php
$nowFormat = date('Y-m-d H:i:s');
$sql = "INSERT INTO table SET field='$nowFormat'";
$sql2 = "INSERT INTO table SET field='$nowFormat'";
...
person elxordi    schedule 12.04.2012
comment
Будьте осторожны, если сервер PHP и сервер Mysql не имеют одного и того же часового пояса по умолчанию. Смотрите мой ответ для альтернативы без этой проблемы. - person Ariel; 06.06.2013

Сделайте это в MySQL, чтобы вообще не задействовать PHP:

select @now := now();

insert into .... values (@now)
select from ... where x=@now
etc....
person Marc B    schedule 12.04.2012

Ты можешь сделать:

<?
$now = time();
$sql = "INSERT INTO table SET field=FROM_UNIXTIME($now)";
$sql2 = "INSERT INTO table SET field=FROM_UNIXTIME($now)";
...

Это позволяет избежать любых возможных проблем с часовыми поясами или локальными форматами даты.

person Ariel    schedule 06.06.2013