PDO - это уровень абстракции, поэтому он зависит от вашей базы данных.MySQL поддерживает транзакции, но только для таблиц InnoDB.В противном случае только с блокировками таблицы (что не то же самое).SQLite всегда поддерживает транзакции.Другая база данных может никогда не быть.
Транзакции по-прежнему требуют от вас (разработчика) создания и проверки логики.База данных не знает, что правильно (правильно, не просто), а что неправильно (неправильно).Вы делаете, поэтому вам нужно создать сценарий, который вызывает BEGIN и COMMIT / ROLLBACK, когда это необходимо.
Также стоит отметить: транзакция не автоматически ROLLBACKed после ошибки базы данных.(Возможно, некоторые базы данных или DBAL делают, но это не стандартно, и вы не должны на это рассчитывать.) Это означает, что ВЫ должны проверять результат / ответ / обратную связь каждого запроса И действовать соответствующим образом (например, вызывая ROLLBACK).1005 *