-
-
Notifications
You must be signed in to change notification settings - Fork 395
Description
BC Break Report
Q | A |
---|---|
BC Break | yes |
Version | 3.0.2 (probably > 3.0) |
PHP | 8.0 |
DBAL-Driver | PDO |
DB | mysql 5.7 and 8.0 |
Summary
When running the command migrations:migrate
with a ddl sql statement (e.g. create table
) on php 8.0 I got an error:
In Connection.php line 1761: There is no active transaction
Previous behavior
Bevore php 8.0 the migration produces no errors.
Current behavior
DDL statements on mysql result in an implicit commit (see mysql documentation). This causes the explicit commit in transactional mode to fail. But only starting with php 8.0 an error is raised (probably due to php/php-src@990bb34).
To bypass the error I can disable the transactional mode by overwriting isTransactional
in my migration, but in my opinion it's a breaking change in the behaviour when using php 8.
I found the same issue in a bug report for the yii framework (yiisoft/yii2#18406) that helped me to figure out what happens. They fixed it by checking PDO::inTransaction
before running the commit. If I'm not wrong this method is not wrapped by the dbal package and therefore not available here.
How to reproduce
- Create a migration with a ddl statement.
- Let the transactional mode active.
- Run the migration.