insertar en 2 tablas distintas

Iniciado por basickdagger, 23 Mayo 2014, 18:48 PM

0 Miembros y 1 Visitante están viendo este tema.

basickdagger

hola tengo la siguiente duda
tengo 2 tablas a las cuales voy a insertarles informacion...

probe haciendo lo siguiente...


Código (php) [Seleccionar]


$sql="INSERT INTO primer_tabla VALUES ('',1,2,3);";
$sql.="INSERT INTO segunda_tabla VALUES ('',3,2,1);";
/* '' las utilizo por que es autoincrementable */

echo $sql;
/*imprimo mi consulta*/

$insertar=mysql_query($sql,$enlace);
if(!$insertar){
die(mysql_error());
}



ya que lo ejecuto me aparece un error de syntaxis... pero si copio el echo que me arroja php y lo pego en la consola de mysql si se insertan y no me da error...

si comento la primer consulta, la segunda si funciona, si comento la segunda, la primera también lo hace...

ósea dejan de funcionar juntas...

ayer ya habia probado he insertado varias veces entonces no entiendo q puede ser alguna idea o sugerencia ?? saludos...


#!drvy

Lo que haces en la consola de mysql en realidad es tirar 2 consultas. Lo que intentas en el php es tirar 2 INSERTS en una consulta.. cosa que no es posible.

Código (php) [Seleccionar]

$sql = array();
$sql[] = 'INSERT INTO primer_tabla VALUES ('',1,2,3)';
$sql[] = "INSERT INTO segunda_tabla VALUES ('',3,2,1)";

print_r($sql);

foreach($sql as $consulta){
   if(!mysql_query($consulta,$enlace)){
      die(mysql_error());
   }
}


PD: UTILIZA MYSQLI... mysql esta viejo.

Saludos

basickdagger

muchas gracias, por fin pude resolverlo, lo curioso es que ayer hice algunas pruebas y si me insertaba los datos...
bueno ya estoy comenzando a dudar que realmente haya funcionado... jajaja peor bueno, como lo explicaste me funciono excelente, muchas gracias...

pd. por más que me lo dicen al final siempre termino mysql hasta que lo recuerdo  :xD

saludos

Mokonauta

Hay otra manera de hacer varios inserts en una sola sentencia
Lo primero que tienes que hacer es traer los datos que vayas a insertar

Ej.

Código (php) [Seleccionar]

$datos = array('dato1','dato2','dato3','dato4'); //
$tables = array("tabla1","tabla2");

foreach($datos as $dato){
$losdatos .= "'$dato',";
$a++;
}
$parausar = substr($losdatos, 0, -1);

$sql = 'START TRANSACTION;<br />';
foreach($tables as $table){
$sql .= "INSERT INTO $table (num1, num2, num3, num4) VALUES ("; // Suponiendo que ingresaras los mismo datos en ambas tablas (poco probable pero es un ejemplo)
$sql .= "$parausar);<br />";
}
$sql .= "COMMIT;";

# Aquí ya tienes todo el query solo tienes que ejecutarlo, seguro que sabes como.


Los TRANSACTIONS son para hacer bloques de consultas, ayudan a mejorar el control y flujo de las mismas.
El destino decide hasta que es desafiado por los condenados.

#!drvy

#4
@Mokonauta, ese código que has proporcionado es completamente infuncional y en todo caso seria valido solo para una conexión con CLIENT_MULTI_STATEMENTS o usando mysqli.

Por otra parte efectivamente las transacciones son bastante útiles en estos casos. Una nota, si usas START TRANSACTION asegúrate de definir AUTOCOMMIT=0 antes.

Código (php) [Seleccionar]
$consultas = array();
$consultas[] = 'INSERT INTO primer_tabla VALUES ('',1,2,3)';
$consultas[] = "INSERT INTO segunda_tabla VALUES ('',3,2,1)";

mysql_query('SET AUTOCOMMIT=0;');
mysql_query('START TANSACTION;');

foreach($consultas as $consulta){
 if(!mysql_query($consulta,$enlace)){ $error = true; break;}
}

// Si hay error, hacemos rollback (deshacer)
if(isset($error)){ mysql_query('ROLLBACK',$enlace); }
// en caso contrario, commit (aplicar)
else { mysql_query('COMMIT',$enlace); }





Aquí puedes ver porque usar mysqli te puede venir bien.. justo para lo que quieres..

Código (php) [Seleccionar]
<?php

$enlace 
= new mysqli('host''user''pass''db');
if(
$enlace->connect_errno){ die('Fallo al connectar: '.$enlace->connect_error); }

$query =  "INSERT INTO primer_tabla VALUES ('',1,2,3); ";
$query .= "INSERT INTO segunda_tabla VALUES ('',3,2,1); ";

if(!
$enlace->multi_query($query)){
die('Error en query: '.$enlace->error);
}

?>


Saludos

basickdagger

hola gracias por sus respuestas
pero...

Citar
Por otra parte efectivamente las transacciones son bastante útiles en estos casos.

que ventajas existen de trabajarlo así, a diferencia de la primer manera que me comentaste?

Saludos