Po změně php 7.4 na 8.2 mi to hlásí, že není aktivní transakce
- Rndoom04
- Člen | 75
Ahoj všem,
postupně se snažím upgradnout větší projekt, který aktuálně běží na
php 7.4.33. Migraci dělám postupnou, tzn. nejprve upgrade verze php, opravit
bugy, chyby, nedostatky a potom upgrade Nette jádra vč. composeru a
dalších částí.
Nicméně ihned po změně php verze mi laděnka hlásí chybu, že není aktivní transakce, přitom je. Chybu mi to na verzi 7.4.33 nehlásilo a nyní v 8.2 ano. Postupným komentování jsem zjistil, že transakci vadí truncate. Resp. cílem je:
- Otevření transakce
- Výmaz tabulky
- Inserty, update v jiných tabulkách
- Commit nebo rollback
Script běží v cronu, ale to je v tuto chvíli jedno.
Tzn. zkoušel jsem holé:
$this->database->beginTransaction();
$this->database->query("TRUNCATE TABLE nazev_tabulky;");
$this->database->commit();
Vyskočí chyba, že není aktivní transakce. Pokud zkusím:
$this->database->beginTransaction();
$this->database->query("UPDATE nazev_tabulky...;");
$this->database->commit();
Tak to projde v pohodě.
Očekávám, že to bude nějaká maličkost. Nevěděl by někdo, prosím? :)
Edit: Samozřejmě jsem zkoušel použít i:
$this->database->transaction(function ($database) {
$database->query("TRUNCATE TABLE nazev_tabulky;");
return true;
});
ale tam jsem také nepochodil. :)
Editoval Rndoom04 (11. 5. 2023 18:08)
- mystik
- Člen | 313
Co pouzivas za databazi? Nektere databaze (MySQL) delaji u urcitych dotazu autocommmit. Tj. je mozne ze spusteni truncate ti udela autocommit a ukonci transakci. Kdyz pak zkusis udelat commit transakce uz neni aktivni. Podobne chyby se driv ignorovaly, ale ted dostanes upozorneni.
- Marek Bartoš
- Nette Blogger | 1280
První aktualizuj knihovny (alespoň bugfix verze), ne php. Můžeš řešit problém co v knihovně vznikl kvůli změně v php a který už může být opravený.
Též jak píše mystik – mysql u změn schematu databáze transakce vůbec nepodporuje (nelze udělat rollback) a ukončuje je autocommitem. https://dev.mysql.com/…-commit.html
Editoval Marek Bartoš (11. 5. 2023 22:05)
- Rndoom04
- Člen | 75
Moc díky za feedback. Nějak jsem to potom asi vytušil, protože jsem to zkoušel obejít přes DELETE FROM a následným ALTER TABLE. DELETE FROM to pustilo ještě, ale ALTER TABLE už ne – také auto commit.
Naštěstí mám takový hrozný kód jen jeden, takže ho ještě fixnu.
Díky moc chlapi.