Foros del Web » Programando para Internet » PHP »

Rollback de transacción iniciada en otro script

Estas en el tema de Rollback de transacción iniciada en otro script en el foro de PHP en Foros del Web. Yo inicio una transacción en un script, que si pulsas un boton llama a otro script que hace un insert. La pregunta es: ¿como se ...
  #1 (permalink)  
Antiguo 02/02/2012, 05:52
 
Fecha de Ingreso: febrero-2012
Mensajes: 7
Antigüedad: 12 años, 3 meses
Puntos: 0
Rollback de transacción iniciada en otro script

Yo inicio una transacción en un script, que si pulsas un boton llama a otro script que hace un insert.

La pregunta es:
¿como se podría deshacer ese insert?
  #2 (permalink)  
Antiguo 02/02/2012, 06:20
 
Fecha de Ingreso: diciembre-2008
Mensajes: 805
Antigüedad: 15 años, 5 meses
Puntos: 20
Respuesta: Rollback de transacción iniciada en otro script

mm, mucho no entiendo, pero lo que entiendo es que podes usar transacciones begin, rollback y commit, pero explicate un poco mejor. muchas gracias.
saludos!!
  #3 (permalink)  
Antiguo 02/02/2012, 10:30
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Rollback de transacción iniciada en otro script

No puedes hacerlo, las transacciónes son únicas por conexión, y al finalizar la ejecución de tu script PHP automáticamente cierra la conexión y emite un commit. Por lo que al cambiar de pagina ya no existe esa transacción.

Saludos.
  #4 (permalink)  
Antiguo 02/02/2012, 10:39
Avatar de Ribon  
Fecha de Ingreso: septiembre-2010
Ubicación: El firmamento
Mensajes: 487
Antigüedad: 13 años, 7 meses
Puntos: 91
Respuesta: Rollback de transacción iniciada en otro script

Lo que se me ocurre es no depender de la transacción si no hacer el insert físico inmediatamente. y devolver o capturar el id que se ingreso usando por ejemplo PDO::lastInsertId() y luego si quieres deshacerlo usar un llamar un DELETE sobre ese id.

bueno este caso solo funcionaría si usas secuencias o auto_increments pero la condición de delete deberías tenerlo.

y ten cuidado porque ese dato al ser insertado podría ser utilizado en otra parte y bueno ya te armas un lio si lo eliminas por ejemplo por problemas de integridad referencial etc.

bueno y como ya me corrí para la parte de base de datos me gustaría presentarte a un amigo.
se llama ACID

y su letra C significa Consistencia, no inicies algo si sabes que puede no terminar, los rollback no se usa como herramientas de validación, eso se hace antes de iniciar cualquier transacción. rollback debes usarlo solo en caso de error fatal!!!! (exageración xD). =)

Espero te haya servido esta información =)

Saludos.
__________________
Utilice el Highlight para mostrar código, mis ojos se lo agradecerán :)
qué es esto? :O -> http://i48.tinypic.com/5x3kzs.png
Ya sabes :)

Última edición por Ribon; 02/02/2012 a las 10:46
  #5 (permalink)  
Antiguo 02/02/2012, 10:48
Avatar de srsombrero  
Fecha de Ingreso: marzo-2008
Mensajes: 128
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: Rollback de transacción iniciada en otro script

Otra idea podria ser tener una tabla temporal con los mismos campos (si son varios registros), una vez finalizada la transaccion es hacer un

INSERT INTO tabla_original SELECT * FROM tabla_temporal;

Esto migraria los campos de la temporal a la original. En el caso de que la transaccion no se realize:

DELETE FROM tabla_temporal;
  #6 (permalink)  
Antiguo 02/02/2012, 10:54
Avatar de Ribon  
Fecha de Ingreso: septiembre-2010
Ubicación: El firmamento
Mensajes: 487
Antigüedad: 13 años, 7 meses
Puntos: 91
Respuesta: Rollback de transacción iniciada en otro script

El problema que hay con eso es que podrían haber 2 usuarios realizando la misma operación.
entonces al hacer el INSERT SELECT se insertarían datos duplicados, o peor, se insertarían registros que no deberían ingresarse :S

saludos.
__________________
Utilice el Highlight para mostrar código, mis ojos se lo agradecerán :)
qué es esto? :O -> http://i48.tinypic.com/5x3kzs.png
Ya sabes :)
  #7 (permalink)  
Antiguo 02/02/2012, 11:09
Avatar de srsombrero  
Fecha de Ingreso: marzo-2008
Mensajes: 128
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: Rollback de transacción iniciada en otro script

Cita:
Iniciado por Ribon Ver Mensaje
El problema que hay con eso es que podrían haber 2 usuarios realizando la misma operación.
entonces al hacer el INSERT SELECT se insertarían datos duplicados, o peor, se insertarían registros que no deberían ingresarse :S

saludos.
Es cuestion de identificar a que usuario le corresponde cada registro, eso tranquilamente con una relacion en la tabla que identifique a que usuario corresponde determinado registro esta solucionado
  #8 (permalink)  
Antiguo 02/02/2012, 11:12
Avatar de srsombrero  
Fecha de Ingreso: marzo-2008
Mensajes: 128
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: Rollback de transacción iniciada en otro script

Igual lo ideal seria que tu conexion de Mysql sea persistente para que no se cierre al finalizar la ejecucion del script. Esto se realiza utilizando mysql_pconnect ().

En este caso no se realiza el commit ya que la conexion queda abierta!

IMPORTANTISIMO:

mysql_pconnect() actua como mysql_connect() con dos diferencias fundamentales.

Primero, durante la conexión, la función intenta primero encontrar un enlace persistente abierto con el mismo host, usuario y password. Si lo encuentra, devuelve el identificador de enlace en lugar de abrir otra conexión.

Segundo, la conexión no será cerrada cuando acabe la ejecución del script. El enlace permanecerá abierta para ser usado en el futuro (mysql_close() no cierra el enlace establecido con mysql_pconnect()).

Última edición por srsombrero; 02/02/2012 a las 11:24

Etiquetas: iniciada, rollback
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 21:50.