Будут ли корректно работать транзакции если обращаться к одному экземпляру 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 написать хитрого асинхронного демона, что-то может сбойнуть.