Foros del Web » Programando para Internet » PHP »

Cerrojos para hacer INSERT en MySQL con PHP

Estas en el tema de Cerrojos para hacer INSERT en MySQL con PHP en el foro de PHP en Foros del Web. Hola quisiera saber donde seria mas correcto colocar los cerrojos en esta serie de INSERTS. Lo que quiero hacer es insertar en 2 tablas una ...
  #1 (permalink)  
Antiguo 10/04/2006, 04:18
 
Fecha de Ingreso: enero-2005
Mensajes: 115
Antigüedad: 12 años, 11 meses
Puntos: 1
Exclamación Cerrojos para hacer INSERT en MySQL con PHP

Hola quisiera saber donde seria mas correcto colocar los cerrojos en esta serie de INSERTS.
Lo que quiero hacer es insertar en 2 tablas una serie de informacion relacionada por un campo que es clave primaria de la segunda tabla, este campo es id_tag que es un autoincrement. Inserto en la segunda tabla los datos y recupero el id_tag, ahora inserto en la primera tabla los datos correspondientes asi como su id_tag (Foreing Key), y si no se ha insertado bien lo que quiero hacer es borrar los datos insertados en la segunda tabla correspondientes al id_tag obtenido al comienzo (basicamente o inserto en las 2 tablas o sino no inserto en ninguna). Mi pregunta es donde coloco los cerrojos hacedme y si es posible decidme el porque? Os pongo el esquema a continuacion, de tal y como lo tengo, y me funciona correctamente:
Código PHP:
 //...Mas codigo antes ...
mysql_query('LOCK TABLES '.$tabla_tag.' WRITE');
mysql_query('SET AUTOCOMMIT = 0');
mysql_query($query,$link) or die('No se pudo insertar los datos en la base de datos.'); //Insertamos el tag_info
$result2=mysql_query('SELECT LAST_INSERT_ID()');
$row=mysql_fetch_row($result2);
$id=$row[0];
mysql_free_result($result2);
mysql_query('COMMIT');
mysql_query('UNLOCK TABLES');
                
//Ahora con el $id que hemos obtenido hacemos una insercion en la tabla cancion
mysql_query('LOCK TABLES '.$tabla_can.' WRITE');
mysql_query('SET AUTOCOMMIT = 0');
$query 'INSERT INTO '.$tabla_can.' (filepath,filename,id_tag) VALUES(\''.mysql_real_escape_string($matriz[$f]['filepath']).'\',\''.mysql_real_escape_string($matriz[$f]['filename']).'\','.$id.')';                
if(!
mysql_query($query,$link)){//Si no se pudo insertar la segunda tabla con exito borramos la primera tabla
         
mysql_query('DELETE FROM '.$tabla_tag.' WHERE '.mysql_field_name($result,0).'='.$id,$link) or die ('Error en la base de datos. No se pudo insertar ni borrar nada.');                        
}
mysql_query('COMMIT');
mysql_query('UNLOCK TABLES');
//...Mas codigo por abajo ... 
Es correcto crear cerrojos para cada INSERT, o es mejor abrir un cerrojo para las dos tablas en un principio y cerrarlo todo al final?? Si es en dos partes en lugar de en una, tendria que abrir un cerrojoj para la sentencia delete o no haría falta?

Algun manual interesante e instructivo sobre cerrojos en MySQL a parte del manual de referencia de MySQL 5.0??
Gracias por la ayuda, a ver si me aclaro algo
__________________
SaRvErOk :ojotes:
  #2 (permalink)  
Antiguo 11/04/2006, 09:38
Avatar de moron  
Fecha de Ingreso: mayo-2004
Mensajes: 971
Antigüedad: 13 años, 7 meses
Puntos: 2
probá con esto:
http://www.forosdelweb.com/showthrea...ht=transaction
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 00:21.