sql >> Database >  >> RDS >> Mysql

Als een PHP PDO-transactie mislukt, moet ik dan expliciet terugdraaien()?

Als u zich niet commit niet rollback een geopende transactie, en deze is niet commited ergens later in je script, wordt het niet commited (zoals gezien door de database-engine) , en wordt automatisch teruggedraaid aan het einde van uw script.


Toch (nou ja, bijna) altijd commit of rollback expliciet de transacties die ik open, dus:

  • Er is geen risico op een fout (zoals 'per ongeluk' later in het script plegen)
  • De code is gemakkelijker te lezen/begrijpen :wanneer men $db->rollback() . ziet , hij weet dat ik de transactie zeker wil terugdraaien, en hij hoeft niet na te denken "Wil hij echt terugdraaien of is hij iets vergeten? en hoe zit het later in het script? "


De DB-engine "ziet" de PDOException niet:deze wordt onder verschillende omstandigheden door PHP gegenereerd -- maar de database kan zelf niets terugdraaien:

  • ofwel een transactie is uitgevoerd
  • of het wordt teruggedraaid
  • of het is niet expliciet vastgelegd of teruggedraaid -- wat betekent dat het niet is vastgelegd -- wat betekent dat wat is gewijzigd niet "echt" is gewijzigd



  1. Meerdere kolommen toevoegen in MySQL met één instructie

  2. De geselecteerde waarde toewijzen in MySQL

  3. Opvragen van huidige datum in tijd mysql

  4. MySQL Selecteer de eerste dag van het jaar en de maand