Foros del Web » Programando para Internet » PHP »

nuevo en trasaccione con php y mysql

Estas en el tema de nuevo en trasaccione con php y mysql en el foro de PHP en Foros del Web. hola amigos estoy intentando usar las trasacciones en mysql tengo la version 5.5.14 y php 5 la mayor parte de las tablas estan en mysam ...
  #1 (permalink)  
Antiguo 25/11/2011, 14:18
Avatar de chalchis  
Fecha de Ingreso: julio-2003
Mensajes: 1.773
Antigüedad: 20 años, 9 meses
Puntos: 21
Pregunta nuevo en trasaccione con php y mysql

hola amigos estoy intentando usar las trasacciones en mysql
tengo la version 5.5.14 y php 5

la mayor parte de las tablas estan en mysam
pero hay un proceso que deseo usar transacciones
hice la tablas en innodb

tengo este ejmplo

Código:
mysql_query('START TRANSACTION', $link);
for ($i=0; $i<20; ++$i) {
    mysql_query("INSERT INTO cms_users (name, status, username) VALUES ('Guilherme', 'Slave', 'gblanco')", $link);
}
mysql_query('COMMIT', $link);
como estoy haciendo pruebas
tengo entendido por lo que llevo leido
si no confirmas con el commit
el insert que naturalemente hace
no deberia insertar registro, pero si los hace

mysql_query('COMMIT', $link);

es decir en mis pruebas no puse el commit
porque esperaba que no hubiera registros
porque no pude confirmar la transaccion pero si los hace

espero me puedan dar una opinion
saludos

gracias
__________________
gerardo
  #2 (permalink)  
Antiguo 25/11/2011, 14:21
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 9 meses
Puntos: 1532
Respuesta: nuevo en trasaccione con php y mysql

además puede que tengas desactivadas las transacciones en el motor InnoDB o que configuraras a MySql con AutoCommit
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #3 (permalink)  
Antiguo 25/11/2011, 14:24
Avatar de chalchis  
Fecha de Ingreso: julio-2003
Mensajes: 1.773
Antigüedad: 20 años, 9 meses
Puntos: 21
Respuesta: nuevo en trasaccione con php y mysql

Cita:
Iniciado por maycolalvarez Ver Mensaje
myisam NO soporta transacciones, debes usar otro motor que las soporte, entre ellos InnoDB
si claro solo que esa tabla en especial la hice en innodb
__________________
gerardo
  #4 (permalink)  
Antiguo 25/11/2011, 14:25
Avatar de chalchis  
Fecha de Ingreso: julio-2003
Mensajes: 1.773
Antigüedad: 20 años, 9 meses
Puntos: 21
Respuesta: nuevo en trasaccione con php y mysql

Cita:
Iniciado por maycolalvarez Ver Mensaje
además puede que tengas desactivadas las transacciones en el motor InnoDB o que configuraras a MySql con AutoCommit
pues leei que "Si se quiere deshabilitar el autocommit para una serie de comandos, lo ideal es utilizar START TRANSACTION (sin necesidad de setear el AUTOCOMMIT en 0). "
__________________
gerardo
  #5 (permalink)  
Antiguo 25/11/2011, 14:27
Avatar de chalchis  
Fecha de Ingreso: julio-2003
Mensajes: 1.773
Antigüedad: 20 años, 9 meses
Puntos: 21
Respuesta: nuevo en trasaccione con php y mysql

pero tambien hice esta prueba

y nada

Código:
mysql_query('SET AUTOCOMMIT=0');
mysql_query('START TRANSACTION', $link);
for ($i=0; $i<20; ++$i) {
    mysql_query("INSERT INTO cms_users (name, status, username) VALUES ('Guilherme', 'Slave', 'gblanco')", $link);
}
//mysql_query('COMMIT', $link); //la pongo asi para ver si ejecuta el insert
__________________
gerardo
  #6 (permalink)  
Antiguo 25/11/2011, 14:33
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 9 meses
Puntos: 1532
Respuesta: nuevo en trasaccione con php y mysql

¿reiniciaste el servidor?
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #7 (permalink)  
Antiguo 25/11/2011, 14:36
Avatar de chalchis  
Fecha de Ingreso: julio-2003
Mensajes: 1.773
Antigüedad: 20 años, 9 meses
Puntos: 21
Respuesta: nuevo en trasaccione con php y mysql

Cita:
Iniciado por maycolalvarez Ver Mensaje
¿reiniciaste el servidor?
mm el mysql no, no lo he reiniciado
__________________
gerardo
  #8 (permalink)  
Antiguo 25/11/2011, 14:46
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 9 meses
Puntos: 1532
Respuesta: nuevo en trasaccione con php y mysql

también puede deberse a que necesitas el mismo resource:

mysql_query('SET AUTOCOMMIT=0', $link);
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #9 (permalink)  
Antiguo 25/11/2011, 14:51
Avatar de chalchis  
Fecha de Ingreso: julio-2003
Mensajes: 1.773
Antigüedad: 20 años, 9 meses
Puntos: 21
Respuesta: nuevo en trasaccione con php y mysql

sorry si ya corregi eso y pues me los sigue insertando
seguiere dicumentando, pero si tienes por ahi un ejmplo
sencillo de lo agradecere

saludos
__________________
gerardo
  #10 (permalink)  
Antiguo 25/11/2011, 14:55
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 9 meses
Puntos: 1532
Respuesta: nuevo en trasaccione con php y mysql

debe haber algo que falle, revisa si en efecto el START TRANSACTION se ejecute:

Código PHP:
Ver original
  1. $dev = mysql_query('START TRANSACTION', $link);
  2.  
  3. print_r($dev);

porque usar transacciones no es tan complejo
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #11 (permalink)  
Antiguo 25/11/2011, 14:55
Avatar de jotaincubus  
Fecha de Ingreso: mayo-2005
Ubicación: Medellin - Colombia
Mensajes: 1.797
Antigüedad: 18 años, 11 meses
Puntos: 394
Respuesta: nuevo en trasaccione con php y mysql

Cita:
MyISAM is a non-transaction-safe storage engine, meaning, all statements are immediately committed, regardless of the auto-commit mode. Hence, rollback would not work here. (See more information on the MyISAM storage engine here, and also, Comparing Transaction and Non-Transaction Engines.) As a comparison, the InnoDB storage engine - another popular storage engine in MySQL - is a transaction-safe storage engine
__________________
Por que existe gente que no agradece después de que se le ha brindado tiempo y ayuda ???
  #12 (permalink)  
Antiguo 25/11/2011, 14:59
Avatar de chalchis  
Fecha de Ingreso: julio-2003
Mensajes: 1.773
Antigüedad: 20 años, 9 meses
Puntos: 21
Respuesta: nuevo en trasaccione con php y mysql

si claro con mysam las tablas no podria usar transacciones pero en esta misma base de datos
cree esta tabla pero en innodb
__________________
gerardo
  #13 (permalink)  
Antiguo 25/11/2011, 15:12
Avatar de jotaincubus  
Fecha de Ingreso: mayo-2005
Ubicación: Medellin - Colombia
Mensajes: 1.797
Antigüedad: 18 años, 11 meses
Puntos: 394
Respuesta: nuevo en trasaccione con php y mysql

Aquí hay una persona que presenta el mismo problema que tu, pero el dice que es normal (y creo que tiene razon) que no se ejecuta la primera porque hay varias transacciones seguidas y mysql_query no soporta esa función (dos transacciones al mismo tiempo) pero mira que la segunda si funciona.
__________________
Por que existe gente que no agradece después de que se le ha brindado tiempo y ayuda ???
  #14 (permalink)  
Antiguo 25/11/2011, 15:20
Avatar de chalchis  
Fecha de Ingreso: julio-2003
Mensajes: 1.773
Antigüedad: 20 años, 9 meses
Puntos: 21
Respuesta: nuevo en trasaccione con php y mysql

Cita:
Iniciado por jotaincubus Ver Mensaje
Aquí hay una persona que presenta el mismo problema que tu, pero el dice que es normal (y creo que tiene razon) que no se ejecuta la primera porque hay varias transacciones seguidas y mysql_query no soporta esa función (dos transacciones al mismo tiempo) pero mira que la segunda si funciona.
gracias amigos ya lo estoy checando
saludos
__________________
gerardo
  #15 (permalink)  
Antiguo 26/11/2011, 18:40
Avatar de chalchis  
Fecha de Ingreso: julio-2003
Mensajes: 1.773
Antigüedad: 20 años, 9 meses
Puntos: 21
Respuesta: nuevo en trasaccione con php y mysql

pues parace que si jala todo bien

Código:
$conect_conexion_tester = conectardb(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);



$bandera == false;
mysql_query('START TRANSACTION', $conect_conexion_tester);
for($t=0;$t<5;$t++)
{
	if($t==3){$valor = "xxx";}else{ $valor = $t;}
	
	$insertar_campos = 'nombre,';
	$insertar_campos .= 'procsnum';
	//valores a insertar
	$insertar_valores = "'gerardo',";//num asignacion
	$insertar_valores .= "'$valor'";//letra asignada
	//tabla
	$insertar_tabla = 'transtester';
	//----------
	$insertar_resultado = tablas_almacenar($insertar_campos, $insertar_tabla, $insertar_valores, $conect_conexion_tester);
	if(!$insertar_resultado)
	{
		$bandera = true;
		break;
	}
	else
	{
		echo "entra<br>";
	}
}
if($bandera == false)
{
	mysql_query('COMMIT', $conect_conexion_tester);
	echo "guardado todo";
}
else
{
	mysql_query("ROLLBACK", $conect_conexion_tester);
	echo "hubo un error todo se deshace";
}

cerrardb($conect_conexion_tester);
incluso comente el commint en un test
y no insertaba eso me indica que apesar de todo estar bien y como abri una
transaccion esta en espera de autorizar si no esta
el commit

saludos
__________________
gerardo

Etiquetas: mysql, registro, tabla
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 03:56.