sql >> Base de Datos >  >> RDS >> Mysql

PDO::commit() éxito o fracaso

La parte clave es establecer PDO en modo de excepción, mientras que tener try-catch solo para hacer una reversión es innecesario. Por lo tanto, su código está bien, no es necesario cambiarlo si todo lo que desea es retroceder en caso de falla, siempre que tenga esta línea en alguna parte:

$dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); 

En caso de falla, el script finalizará, la conexión se cerrará y mysql estará feliz de revertir la transacción por usted.

En caso de que aún desee revertir manualmente, debe hacerlo correctamente, no como se dice en las otras respuestas. Asegúrese de que

  • estás detectando una Exception , no PDOException , ya que no importa qué excepción en particular anuló la ejecución
  • estás volviendo a lanzar una excepción después de la reversión, para ser notificado del problema
  • también que un motor de tablas admite transacciones (es decir, para Mysql debería ser InnoDB, no MyISAM).

Esta lista de verificación está tomada de mi artículo que puede resultarle útil en este y muchos otros aspectos.