elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  transacciones en php
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: transacciones en php  (Leído 6,812 veces)
OssoH


Desconectado Desconectado

Mensajes: 911


Ver Perfil
transacciones en php
« en: 13 Julio 2010, 17:59 pm »

Hola a todos :
Tengo un código PHP que ejecuta 10 sentencias SQL. Me gustaría que si alguna de ellas fallase deshaga los cambios que las SQL anteriores ejecutadas.
¿es posible esto en PHP?
Gracias.


En línea

MinusFour
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.529


I'm fourth.


Ver Perfil WWW
Re: transacciones en php
« Respuesta #1 en: 13 Julio 2010, 19:41 pm »

Creo que lo mejor que podrías hacer es usar los simples if/else.


En línea

Shell Root
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.724


<3


Ver Perfil WWW
Re: transacciones en php
« Respuesta #2 en: 13 Julio 2010, 20:11 pm »

En PHP lo dudo, pero si se puede en MSSQL. Crea un Store Procedure y consulta clausulas como
Código
  1. BEGIN TRANSACTION
  2. ROLLBACK
  3. @@ERROR
En línea

Te vendería mi talento por poder dormir tranquilo.
OssoH


Desconectado Desconectado

Mensajes: 911


Ver Perfil
Re: transacciones en php
« Respuesta #3 en: 14 Julio 2010, 00:01 am »

Por lo que he averiguado si mis tablas son MYSAM no voy a poder hacerlo.
Necesariamente las tengo que tener en MYSAM en lugar de INNODB.  :(

Lo del if/else no lo entiendo, porque si las tres primeras sentencias sQL las hace correcta y la 4 fallase ¿cómo deshago las tres últimas? 

Supongo que no hay forma humana de hacerlo por el tipo de mis tablas.

Gracias por los comentarios.
En línea

MinusFour
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.529


I'm fourth.


Ver Perfil WWW
Re: transacciones en php
« Respuesta #4 en: 14 Julio 2010, 02:40 am »

Pues si no funciona una sentencia SQL haces otra sentencia SQL que lo haga volver a su estado original. No es muy práctico pero debería funcionar.
En línea

Shell Root
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.724


<3


Ver Perfil WWW
Re: transacciones en php
« Respuesta #5 en: 14 Julio 2010, 04:47 am »

MinusFour, creo que estas confundido, imagina que son 10 transacciones. Y que pasaron 9 por las clausulas IF's, en el décimo IF, hubo un error en la consulta. Como realizas un ROLLBACK de las transacciones anteriores, IMPOSIBLE o tal vez si se puede desarrollar pero sería muy tedioso!

Yo siendo tú, migraría a MSSQL.
« Última modificación: 14 Julio 2010, 04:49 am por shellroot@alex-laptop:~$ » En línea

Te vendería mi talento por poder dormir tranquilo.
OssoH


Desconectado Desconectado

Mensajes: 911


Ver Perfil
Re: transacciones en php
« Respuesta #6 en: 14 Julio 2010, 09:14 am »

Asi es. No puedo utilizar MSSQL porque lo tengo todo montado en MYSQL.
Gracias por los consejos.
En línea

MazarD
Colaborador
***
Desconectado Desconectado

Mensajes: 885


mazard.info


Ver Perfil WWW
Re: transacciones en php
« Respuesta #7 en: 14 Julio 2010, 09:33 am »

Y que problema hay? puedes cambiar rápidamente el engine de tus tablas con: ALTER TABLE tabla ENGINE = InnoDB; y a partir de ahí ya podrás utilizar transacciones y reglas de integridad.
En línea

-Learn as if you were to live forever, live as if you were to die tomorrow-

http://www.mazard.info
irc://irc.freenode.org/elhacker.net
OssoH


Desconectado Desconectado

Mensajes: 911


Ver Perfil
Re: transacciones en php
« Respuesta #8 en: 14 Julio 2010, 10:15 am »

Según lei esto puede tener implicaciones. Haré una copia de seguridad y lo cambiaré y probaré todo.
Gracias!!
En línea

MinusFour
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.529


I'm fourth.


Ver Perfil WWW
Re: transacciones en php
« Respuesta #9 en: 14 Julio 2010, 13:58 pm »

Es tedioso si son 10, yo estaba pensando en menos queries xD.

Código
  1.  
  2. function do_mysql_queries(){
  3.  
  4. if(mysql_query($sql1) == false){ return 1;}
  5. if(mysql_query($sql2) == false){ return 2;}
  6. if(mysql_query($sql3) == false){ return 3;}
  7. if(mysql_query($sql4) == false){ return 4;}
  8.  
  9. return 0;
  10.  
  11. }
  12.  
  13. function undo_mysql_queries($err_num){
  14.  
  15. switch($err_num){
  16.  
  17. case 4: mysql_query($undoQuery3);
  18. case 3: mysql_query($undoQuery2);
  19. case 2: mysql_query($undoQuery1);
  20. case 1: return false;
  21. default: return true;
  22.  
  23. }
  24.  
  25. }
  26.  
  27. if(undo_mysql_queries(do_mysql_queries())){
  28.  
  29. echo "Se ejecutaron las consultas satisfactoriamente. ";
  30.  
  31. } else {
  32.  
  33. echo "Hubo un fallo en las consultas";
  34.  
  35. }
  36.  

También encontre esto, pero dice que es para php 4 así que no se que tanto te sirva.

http://www.deepbluesky.com/blog/-/myisam-transactions_20/
« Última modificación: 14 Julio 2010, 14:05 pm por MinusFour » En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines