- Affected Version
- WoltLab Suite 5.4
- Affected App
- WoltLab Suite Core
Hallo,
bei einem unserer Kunden trat in Verbindung mit dem KittMedia Shop und WSC 5.4 das Problem auf, dass eine Datenbank-Transaktion die automatisch übernommen/ausgeführt (autocommit=1; Standardwert) wird, nun unter PHP 8.0 zu der Fehlermeldung "Could not commit transaction" mit der ursprünglichen PDO-Fehlermeldung "There is no active transaction" führt.
Eine kurze Recherche zeigte auf, das PHP 8.0 diese vormals unterdrückte Meldung nun ans Tageslicht bringt. Wir haben dem Kunden eine angepasste Database.class.php zur Verfügung gestellt, wo jeweils bei Database::beginTransaction(), Database::commitTransaction() sowie Database::rollBackTransaction() explizit überprüft wird, ob man sich tatsächlich noch in einer laufenden Transaktion befindet (PDO::inTransaction()) und diese nicht schon automatisch übernommen/ausgeführt wurde.
Das Problem dürfte in allen WSC Version auftreten können die mit PHP 8 kompatibel sind und darunter ausgeführt werden.
Die ursprüngliche Fehlermeldung lautet wie folgt, ist aber eigentlich für die Erforschung der Ursache uninteressant, da oben genannt:
- Requested URL
- POST /acp/index.php?worker-proxy/&t=REDACTED
- Referrer
- https://REDACTED/acp/index.php?rebuild-data/
- Error Message
- Could not commit transaction
- Type
- wcf\system\database\exception\DatabaseTransactionException
- File (Line)
- /var/www/REDACTED/lib/system/database/Database.class.php (243)
- Stacktrace
-
- /var/www/REDACTED/shop/lib/system/worker/PackageServerRebuildDataWorker.class.php (113): wcf\system\database\Database->commitTransaction(…)
- /var/www/REDACTED/lib/acp/action/WorkerProxyAction.class.php (104): kpps\system\worker\PackageServerRebuildDataWorker->execute(…)
- /var/www/REDACTED/lib/action/AbstractAction.class.php (53): wcf\acp\action\WorkerProxyAction->execute(…)
- /var/www/REDACTED/lib/action/AJAXInvokeAction.class.php (65): wcf\action\AbstractAction->__run(…)
- /var/www/REDACTED/lib/system/request/Request.class.php (89): wcf\action\AJAXInvokeAction->__run(…)
- /var/www/REDACTED/lib/system/request/RequestHandler.class.php (119): wcf\system\request\Request->execute(…)
- /var/www/REDACTED/acp/index.php (11): wcf\system\request\RequestHandler->handle(…)
- Error Message
- There is no active transaction
- Type
- PDOException
- File (Line)
- /var/www/REDACTED/lib/system/database/Database.class.php (226)
- Stacktrace
-
- /var/www/REDACTED/lib/system/database/Database.class.php (226): PDO->commit(…)
- /var/www/REDACTED/shop/lib/system/worker/PackageServerRebuildDataWorker.class.php (113): wcf\system\database\Database->commitTransaction(…)
- /var/www/REDACTED/lib/acp/action/WorkerProxyAction.class.php (104): kpps\system\worker\PackageServerRebuildDataWorker->execute(…)
- /var/www/REDACTED/lib/action/AbstractAction.class.php (53): wcf\acp\action\WorkerProxyAction->execute(…)
- /var/www/REDACTED/lib/action/AJAXInvokeAction.class.php (65): wcf\action\AbstractAction->__run(…)
- /var/www/REDACTED/lib/system/request/Request.class.php (89): wcf\action\AJAXInvokeAction->__run(…)
- /var/www/REDACTED/lib/system/request/RequestHandler.class.php (119): wcf\system\request\Request->execute(…)
- /var/www/REDACTED/acp/index.php (11): wcf\system\request\RequestHandler->handle(…)