Будут ли корректно работать транзакции если обращаться к одному экземпляру PDO из нескольких мест одновременно?

Хочу использовать один экземпляр PDO:

class Data
{
static $DB;

public static function getDB()
{
    if (self::$DB != null)
    {
        return self::$DB;
    }
    else
    {
        self::$DB = new PDO("pgsql:host=$host;port=$port;dbname=$dbname", self::$db_name, self::$db_pass, $opt);
        return self::$DB;
    }
}

private function __construct(){}
}

Юзер запрашивает страницу, Запускается код 1:

$db = Data::getDB();
try 
{
   db::beginTransaction();
   //Цепочка транзакций
   db:commit();
}
catch(error e)
{
    db::rollback();
}

В тоже время другой юзер запрашивает другую страницу и запускается код 2:

$db = Data::getDB();
$stmt = $db->prepare("DELETE FROM administrator WHERE id=?");
    $stmt->execute([1]);

Если во время выполнения кода 1 на позиции "Цепочка транзакций", будет запущен код 2, попадет ли запрос из кода 2 в транзакцию из кода 1?


Ответы (1 шт):

Автор решения: Sergei Kirjanov

(Я не сильно работал с PHP, если что)

В обычном режиме есть несколько процессов-обработчиков HTTP запросов с однопоточным интерпретатором в каждом. Если процесс обрабатывает один запрос, то другой он одновременно обрабатывать не будет. Конфликта транзакций не будет.

Возможно если на PHP написать хитрого асинхронного демона, что-то может сбойнуть.

→ Ссылка