2010-01-04 9 views

Respuesta

9

Si no commit no rollback una transacción abierta, y no es commited en cualquier lugar más tarde en su guión, que no será commited(como se ve por el motor de base de datos), y que volver enrollada automáticamente a el final de tu script


Aún así, (bueno, casi) siempre commit o rollback explícitamente las transacciones abro, por lo que:

  • No hay riesgo de un error (como cometer "por error" más adelante en el guión)
  • el código es más fácil de leer/entender: cuando uno ve $db->rollback(), él sabe que yo quiero la transacción enrollados a volver seguro, y no tener que pensar "mismo hizo verdadera Quiero retroceder, o se olvidó de algo? y qué hay más tarde en el guión? "


El motor de base de datos no 've' el PDOException: se tira por PHP bajo diversas condiciones - pero la base de datos no rollback nada por sí mismo:

  • cualquiera una transacción se compromete
  • o se rodó-back
  • o que no está comprometida de manera explícita ni enrollada hacia atrás - lo que significa que no está comprometida - lo que significa que lo que se ha modificado no es "realmente" modificado
+1

Sí, incluso si se retrotrae automáticamente, sería una práctica de codificación muy mala dejar que la restitución ocurra cuando finalice el guión. Si alguien modificó el código más tarde, podría haber errores. – MindStalker

Cuestiones relacionadas