Foros del Web » Programando para Internet » PHP »

PHP OO Uso de BEGIN, COMMIT y ROLLBACK

Estas en el tema de Uso de BEGIN, COMMIT y ROLLBACK en el foro de PHP en Foros del Web. Buenas, espero colocar esto en el foro correcto. Tengo muchas dudas sobre el funcionamiento de estas funciones de mysqli desde php como ejemplo, tengo este ...
  #1 (permalink)  
Antiguo 21/11/2015, 00:09
 
Fecha de Ingreso: julio-2014
Mensajes: 12
Antigüedad: 10 años, 5 meses
Puntos: 0
Uso de BEGIN, COMMIT y ROLLBACK

Buenas, espero colocar esto en el foro correcto.

Tengo muchas dudas sobre el funcionamiento de estas funciones de mysqli desde php
como ejemplo, tengo este ejemplo sacado de la documentación de estas funciones:

Código PHP:
Ver original
  1. <?php
  2. $mysqli = new mysqli("127.0.0.1", "mi_usuario", "mi_contraseña", "sakila");
  3.  
  4. if ($mysqli->connect_errno) {
  5.     printf("Conexión fallida: %s\n", $mysqli->connect_error);
  6.     exit();
  7. }
  8.  
  9. $mysqli->begin_transaction(MYSQLI_TRANS_START_READ_ONLY);
  10.  
  11. $mysqli->query("SELECT first_name, last_name FROM actor");
  12. $mysqli->commit();
  13.  
  14. $mysqli->close();
  15. ?>

¿Como funcionan las flags que me da la documentación? <-ironicamente, no dice su funcionamiento
¿Todas las consultas ejecutadas luego de BEGIN se ejecutan realmente? ¿es alterada la base de datos?
sino es alterada la base de datos ¿al utilizar COMMIT, se realizan los cambios?
si es alterada ¿al usar ROLLBACK se descarta esos cambios?

al declarar un begin, todas las consultas insert, select y update que se hagan después pueden ser revertidas con el rollback?

si es asi, puede realizarse de esta forma?

Código PHP:
Ver original
  1. <?php
  2. class transaccion{
  3.  
  4. function nueva(){
  5.  $mysqli->begin_transaction(MYSQLI_TRANS_START_READ_ONLY);
  6. }
  7.  
  8. function add_consulta($parametros){
  9.  $mysqli->query($parametros);
  10. }
  11.  
  12. function finalizar_transaccion(){
  13.  $mysqli->$mysqli->commit();
  14. }
  15.  
  16. function cancelar_transaccion(){
  17.  $mysqli->rollback();
  18. }
  19. }
  20. ?>

es posible utilizar nueva() en un script, ir agregando items con add_consulta y luego, si asi lo desea, puedan guardarse los cambio con finalizar_transaccion o cancelarla con su respectivo metodo en scripts diferetes?

Gracias por su paciencia y tiempo.
  #2 (permalink)  
Antiguo 21/11/2015, 02:00
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 15 años, 3 meses
Puntos: 214
Respuesta: Uso de BEGIN, COMMIT y ROLLBACK

Saludo.
Pues creo que el tema es de revisar con calma la documentación,
por ej aquí
o aquí
traen ejemplos concretos, y claro que se va a modificar la info,
es como sí se estuviese ejecutando inserts, o updates, deletes pero en un
bloque más estructurado, y con la ventaja del commit o rollback según se requiera.

En cuanto a la clase, es mejor de ese modo, sin embargo en la función de finalizar
sobra un $mysqli.
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #3 (permalink)  
Antiguo 21/11/2015, 09:48
 
Fecha de Ingreso: julio-2014
Mensajes: 12
Antigüedad: 10 años, 5 meses
Puntos: 0
Respuesta: Uso de BEGIN, COMMIT y ROLLBACK

Buenas!.

eso quiere decir que todas las acciones que haga luego del begin pueden ser revertidas con rollback?
por ejemplo, si registro una nueva compra y en medio de esa compra tengo que registrar un nuevo articulo, al cancelar la compra y hacer rollback se "elimina" ese articulo registrado?

según la sintaxis, las banderas son necesarias?
  #4 (permalink)  
Antiguo 21/11/2015, 10:48
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 15 años, 3 meses
Puntos: 214
Respuesta: Uso de BEGIN, COMMIT y ROLLBACK

Saludo.
Es correcto, lo que esté luego del BEGIN podrá ser revertido con el ROLLBACK.
En cuanto a las banderas, que imagino son cada función de mysqli,
claro que deben ser usadas.

Como nota final, tal vez sea mejor usar
$mysqli->autocommit(false); //al abrir la transacción
y
$mysqli->autocommit(true); //al cerrar la transacción

en vez de usar $mysqli->begin_transaction(MYSQLI_TRANS_START_READ_ONLY) ;
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #5 (permalink)  
Antiguo 22/11/2015, 07:09
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Uso de BEGIN, COMMIT y ROLLBACK

Cita:
Iniciado por spiner13 Ver Mensaje
Buenas!.

eso quiere decir que todas las acciones que haga luego del begin pueden ser revertidas con rollback?
por ejemplo, si registro una nueva compra y en medio de esa compra tengo que registrar un nuevo articulo, al cancelar la compra y hacer rollback se "elimina" ese articulo registrado?

según la sintaxis, las banderas son necesarias?
Cuidado.
No todos los motores de tablas de MySQL soportan transacciones. Sólo funcionan con las InnoDB y no funcionan bien si la Red sufre de inestabilidad y/o microcortes en los enlaces al la base.
Es requisito obligatorio que la conexión no se caiga.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 22/11/2015, 10:28
 
Fecha de Ingreso: julio-2014
Mensajes: 12
Antigüedad: 10 años, 5 meses
Puntos: 0
Respuesta: Uso de BEGIN, COMMIT y ROLLBACK

Gracias por sus respuestas!

una ultima duda, a que se refiere con auto consignas? y que sucede al desactivarlas ?
  #7 (permalink)  
Antiguo 22/11/2015, 12:12
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 15 años, 3 meses
Puntos: 214
Respuesta: Uso de BEGIN, COMMIT y ROLLBACK

Saludo
El autocommit es otro modo de empezar y terminar la transacción.
Sí se desactivan pues se ejecutarán los querys pero no
dentro de una transacción.
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com

Etiquetas: commit, rollback, transacciones
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:57.