Каждый имеющийся у вас объект подключения к базе данных представляет собой отдельное подключение к базе данных, даже если подключение к одному и тому же серверу базы данных.Каждое соединение полностью не зависит друг от друга, поэтому транзакция, запущенная в одном соединении, будет невидима для другого соединения.
Если все ваши базы данных имеют доступ к одному и тому же серверу, просто создайте одно соединение и передайте его любому, кому необходим доступ к соединению.Тогда транзакция будет распространяться на все приложения.
class ClassThatNeedsDbAccess
{
protected $connection = NULL;
protected function doQuery ($query)
{
return ($this -> connection -> execute ($query));
}
public function __construct (PDO $connection)
{
$this -> connection = $connection;
}
}
class OtherClassThatNeedsDbAccess extends ClassThatNeedsDbAccess
{
}
$myDb = new PDO ('dsn_goes_here');
$obj1 = new ClassThatNeedsDbAccess ($myDb);
$obj2 = new OtherClassThatNeedsDbAccess ($myDb);
Если вы разговариваете с разными серверами баз данных, вам, вероятно, следует заключить все соединения в объект, который может координировать действия базы данных.Этот объект будет обязан следить за тем, какое соединение с базой данных имеет транзакцию в полете.