beginTransaction () en commit () voor voorbereide en niet-voorbereide instructies

Ik heb de volgende code:

try{
 $db->beginTransaction();
 $handler = $db->prepare(...);
 $handler->execute()
 $query2 = "INSERT INTO...";
 $db->exec($query2);
 $db->commit();
}catch (PDOException $e) {
 try { $db->rollBack(); } catch (Exception $e2) {}
}

Mijn vraag is of de rollBack() alle wijzigingen terugdraait die worden veroorzaakt door beide, execute() en exec() ? De reden voor het gebruik van exec() is dat ik de $ query2 dynamisch moet maken en op deze manier is het veel gemakkelijker voor mij.

0

1 antwoord

Alle bewerkingen die worden uitgevoerd tussen het begin van een transactie en het punt waarop u het terugdraaien uitvoert, worden omgekeerd. Het maakt niet uit HOE u die bewerkingen hebt gedaan - ze worden teruggedraaid.

Uiteraard gaat dit ervan uit dat u voor de transactie geschikte databanken/tabellen gebruikt. Als uw exec() bijvoorbeeld is uitgevoerd op een MyISAM-tabel in MySQL en de execute() in een InnODB-tabel, wordt de InnoDB-bewerking teruggedraaid, maar zit u vast aan de MyISAM-tabel.

1
toegevoegd