Foros del Web » Programando para Internet » PHP »

Guardar en todas las tablas o en ninguna

Estas en el tema de Guardar en todas las tablas o en ninguna en el foro de PHP en Foros del Web. Hola, tengo el siguiente inconveniente.. ya he trabajado con funciones (en postgres) y transacciones para insertar datos.. pero esta vez trabajo bajo mysql y php.. ...
  #1 (permalink)  
Antiguo 25/04/2012, 10:43
Avatar de Beuses  
Fecha de Ingreso: marzo-2009
Ubicación: Maracaibo
Mensajes: 132
Antigüedad: 15 años, 1 mes
Puntos: 5
Pregunta Guardar en todas las tablas o en ninguna

Hola, tengo el siguiente inconveniente..
ya he trabajado con funciones (en postgres) y transacciones para insertar datos..
pero esta vez trabajo bajo mysql y php..

Necesito guardar en varias tablas pero la idea es que guarde en todas o en ninguna...

mi pagina conexion.php

Código PHP:
<?php function conectar()
    {
        
$servidor mysql_connect("localhost","root","") or die('Error de conexion al Servidor: ' mysql_error());
        
$basedatos mysql_select_db("directorio") or die('Error de conexion con la BD: ' mysql_error());
        
mysql_query ("SET NAMES 'utf8'");
    }
    function 
desconectar()
    {
        
mysql_close();
    }
?>
Yo estoy trayendo valores de una pagina.. y los capturo e "inserto" en save.php

Código PHP:
<?php
include ('conexion.php');
conectar();

$razon $_POST['razon'];
$direccion $_POST['direccion'];
$rif $_POST['rif'];
$id_anun $_POST['id_anun'];

echo 
'Razon social: '.$razon;
echo 
'<br>';
echo 
'Direccion: '.$direccion;
echo 
'<br>';
echo 
'Rif: '.$rif;
echo 
'<br>';
echo 
'Otra: '.$id_anun;
echo 
'<br>';

mysql_query("BEGIN");

$sql_1 mysql_query("INSERT INTO tbl_empresa (razon_social, direccion, rif) VALUES ('$razon', '$direccion', '$rif')");
$sql_2 mysql_query("INSERT INTO tbl_relacion (id_anun) VALUES ('$id_anun')");

if ((!
$sql_1)&&(!$sql_2)) { echo 'El commit= '.mysql_query("COMMIT"); }
else { echo 
'El Rollback= '.mysql_query("ROLLBACK"); }
desconectar();
?>
se q esta mal.. pero no se como hacerlo...

Ayuuda por favor..
  #2 (permalink)  
Antiguo 26/04/2012, 04:29
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 13 años, 7 meses
Puntos: 331
Respuesta: Guardar en todas las tablas o en ninguna

Cuál es la pregunta?
__________________
Fere libenter homines, id quod volunt, credunt.
  #3 (permalink)  
Antiguo 26/04/2012, 05:42
Avatar de SirDuque  
Fecha de Ingreso: febrero-2009
Ubicación: Paso del Rey, Buenos Aires, Argentina
Mensajes: 975
Antigüedad: 15 años, 2 meses
Puntos: 89
Respuesta: Guardar en todas las tablas o en ninguna

El problema es rollback o el commit verdad?
Tenes que leer la documentacion oficial.

Si no pegas con el clavo, lo que queda es hacer lo siguiente.

Por lo que veo si no inserta las dos query no te sirve.

Código PHP:
$sql1="INSERT INTO tabla1 () VALUES ()";
$sql2="INSERT INTO tabla2 () VALUES ()";
$query1=mysql_query($sql1);
$query2=mysql_query($sql2);
if(
$query1){
 
$ultimoInsert =  mysql_insert_id();
 if(
$query2){
   echo 
"Todo Ok<br>";
 }else{
   echo 
mysql_error()."<br>";
   
$sql3="DELETE FROM tabla1 WHERE id=$ultimoInsert";
   
mysql_query($sql3)or die( mysql_error());
 }
}else{
 echo 
mysql_error()."<br>";

__________________
Mono programando!
twitter.com/eguimariano
  #4 (permalink)  
Antiguo 26/04/2012, 06:43
Avatar de gjx2  
Fecha de Ingreso: agosto-2008
Ubicación: R.D
Mensajes: 1.153
Antigüedad: 15 años, 8 meses
Puntos: 139
Respuesta: Guardar en todas las tablas o en ninguna

Tu problema es como estas evaluando la condicion.

Código PHP:
Ver original
  1. if ((!$sql_1)&&(!$sql_2)) { echo 'El commit= '.mysql_query("COMMIT"); }
  2. else { echo 'El Rollback= '.mysql_query("ROLLBACK"); }
  3. desconectar();


Segun esta condición dices que si el primer query no se ejecuta y el segundo tampoco se ejecuta entonces hazme un COMMIT a la base de datos.
Obviamente eso no esta bien.

La forma seria

Código PHP:
Ver original
  1. if (($sql_1) && ($sql_2)){ echo 'El commit= '.mysql_query("COMMIT"); }
  2. else { echo 'El Rollback= '.mysql_query("ROLLBACK"); }

Y se lee, si el primer sql_1 se realizo y se realizo el segundo hazme el COMMIT de lo contrario si uno de los dos fallo hazme un ROLLBACK.

Saludos.
  #5 (permalink)  
Antiguo 08/05/2012, 09:40
Avatar de Beuses  
Fecha de Ingreso: marzo-2009
Ubicación: Maracaibo
Mensajes: 132
Antigüedad: 15 años, 1 mes
Puntos: 5
Respuesta: Guardar en todas las tablas o en ninguna

Oh... Muchas gracias por su ayuda.. aplicaré lo que me han dicho... la verdad no me daba la logica para hacer eso :$ muchas gracias a todos (Y)

Etiquetas: mysql, rollback, tablas, guardar
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 13:02.