Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Duda en manejo de transacciones desde Mysql

Estas en el tema de Duda en manejo de transacciones desde Mysql en el foro de PHP en Foros del Web. Tengo una consulta, hare una especie de pseudocodigo: error = false; //variable que idetifica si hay error Inicio_transaccion(BEGIN); query_insert BD; ejecuta insert; Si (!insert){error = ...
  #1 (permalink)  
Antiguo 07/03/2013, 18:07
 
Fecha de Ingreso: noviembre-2012
Ubicación: Villa Maria, Peru
Mensajes: 46
Antigüedad: 11 años, 5 meses
Puntos: 0
Duda en manejo de transacciones desde Mysql

Tengo una consulta,
hare una especie de pseudocodigo:

error = false; //variable que idetifica si hay error
Inicio_transaccion(BEGIN);

query_insert BD;
ejecuta insert;
Si (!insert){error = true;}

query insert2 a BD;
[SE PRODUCE UN ERROR EXTERNO AL SISTEMA]
ejecuta insert2;
Si (!insert2){error = true;}

Si(error){ROLLBACK}
Sino{COMMIT}

Suponiendo que al momento de registrar esta transaccion, se produce un error EXTERNO al sistema(por ejemplo un apagon, la pc se apaga po x motivos) ,en esa linea de codigo; se grabará solo el primer insert? o no se grabara nada? porque aun no llega al ROLLBACK.
  #2 (permalink)  
Antiguo 07/03/2013, 18:28
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años
Puntos: 461
Respuesta: Duda en manejo de transacciones desde Mysql

http://www.php.net/manual/es/pdo.begintransaction.php
Cita:
Iniciado por Manual de PHP
Desctiva el modo 'autocommit'. Mientras el modo 'autocommit' esté desactivado, no se consignarán los cambios realizados en la base de datos a través de una instancia de PDO hasta que se finalice la transacción con una llamada a PDO::commit(). Una llamada a PDO::rollBack() revertirá todos los cambios de la base de datos y devolverá la conexión al modo 'autocommit'.

Algunas bases de datos, incluida MySQL, ejecután automáticamente un CCOMMIT implícito cuando una sentencia de definición de lenguaje de base de datos (DDL), tales como DROP TABLE o CREATE TABLE, se ejecutan en una transacción. El CCOMMIT implícito prevendrá de la reversión de cualquier otro cambio dentro del límite de la transacción.
Si ves lo que dice el manual si se desactiva el autocomit entonces no hay escritura de datos hasta que no se haya ejecutado el PDO::commit() según interpreto, ahora es cuestión de que hagas tus pruebas, saludos
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #3 (permalink)  
Antiguo 07/03/2013, 18:29
Avatar de djsos  
Fecha de Ingreso: septiembre-2007
Ubicación: Madrid-España
Mensajes: 374
Antigüedad: 16 años, 7 meses
Puntos: 14
Respuesta: Duda en manejo de transacciones desde Mysql

Según lo has puesto hasta que no son evaluados todos los insert y llegas al commit no se ejecuta realmente las sentencias.

Si interrumpes en el segundo insert no llegas al commit que es quien realmente ejecuta las sentencias por lo que no se grabarian los datos.

Un saludo
__________________
Es de bien nacidos ser agradecidos.
Desarrollo de software a medida | TPV Comercios
  #4 (permalink)  
Antiguo 07/03/2013, 18:49
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años
Puntos: 461
Respuesta: Duda en manejo de transacciones desde Mysql

Es lo que dice el manual por eso es bueno hacer una consultica de vez en cuando al mismo, saludos
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way

Etiquetas: php+mysql
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 15:19.