Het belangrijkste onderdeel is om PDO in uitzonderingsmodus te zetten, terwijl het niet nodig is om alleen try-catch te hebben om een rollback uit te voeren. Uw code is dus in orde, u hoeft deze niet te wijzigen als u alleen terugdraait bij een fout, zolang u deze regel maar ergens heeft:
$dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
In geval van een mislukking wordt het script beëindigd, de verbinding gesloten en mysql zal de transactie graag voor u terugdraaien.
Als u nog steeds handmatig wilt terugdraaien, moet u het goed doen, niet zoals in de andere antwoorden wordt gezegd. Zorg ervoor dat
- je vangt
Exception
, nietPDOException
, omdat het niet uitmaakt welke specifieke uitzondering de uitvoering heeft afgebroken - je gooit opnieuw een uitzondering na terugdraaien, om op de hoogte te worden gesteld van het probleem
- ook dat een tabel-engine transacties ondersteunt (d.w.z. voor Mysql zou het InnoDB moeten zijn, niet MyISAM).
Deze checklist is afkomstig uit mijn artikel die u misschien ook nuttig vindt in deze of vele andere aspecten.