Я не могу найти окончательный ответ на вопрос, разрешено ли совершать транзакции в PHP, охватывающие несколько баз данных.
Я использую тот же объект подключения (mysqli) и выполняю транзакции следующим образом:
$mysqli->autocommit(false);
try {
// Assume here that some code would throw an exception
$stmt = $mysqli->prepare("INSERT INTO db1.x (column) VALUES (y)");
$stmt->execute();
$stmt->close();
$stmt = $mysqli->prepare("INSERT INTO db2.x (column) VALUES (y)");
$stmt->execute();
$stmt->close();
$mysqli->commit();
// Great success
} catch (Exception $e) {
$mysqli->rollback();
throw $e; // handle elsewhere
}
Разрешено ли это, и будет ли он правильно фиксировать и откатываться? Согласно руководству (http://dev.mysql.com/doc/refman/5.6/en/xa.html) и другие потоки на SO, кажется, мне нужно использовать операторы XA, но не совсем ясно (мне), если это при использовании нескольких серверов баз данных, нескольких подключений или просто в целом при выполнении кода выше.