Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

Error en Insert (...lo hise de nuevo)

Estas en el tema de Error en Insert (...lo hise de nuevo) en el foro de Bases de Datos General en Foros del Web. Hola a todos: Me está resultando de gran ayuda el foro para mis progresos con mi proyecto. Gracias a todos por adelantado. Estoy haciendo un ...
  #1 (permalink)  
Antiguo 09/12/2010, 18:03
Avatar de Rankxerox1984  
Fecha de Ingreso: septiembre-2010
Mensajes: 253
Antigüedad: 13 años, 7 meses
Puntos: 4
Error en Insert (...lo hise de nuevo)

Hola a todos:

Me está resultando de gran ayuda el foro para mis progresos con mi proyecto. Gracias a todos por adelantado. Estoy haciendo un Insert a dos tablas relacionadas. Para ello primero hago el insert a la tabla "madre" y mediante un select obtengo el ultimo PK que convierto mediante el uso de una variable en la K (no PK) de la tabla "hija" una vez obtenida la variable la utilizo como un valor del registro en el insert de esa tabla.

aqui el error obtenido con ese improbo esfuerzo
Cita:
Error in query: INSERT INTO direcciones (idPER,direccion, poblacion, provincia, ZIPCode, pais ) VALUES ('Resource id #3','calvet 3456 12 3','Barcelona','Barcelona','087456',''). Duplicate entry '0' for key 'PRIMARY'
Y aquí el código que lo origina:


Código PHP:
// open connection 
$connection mysql_connect($host$user$pass) or die ("Unable to connect!"); 

// select database 
mysql_select_db($db) or die ("Unable to select database!"); 

// creo query

 
$query "INSERT INTO personas (nombre,apellido1,apellido2,usuario,clave) VALUES ('$nombre', 

'$apellido1','$apellido2','$usuario','$clave')"
;

// ejecuto query
$result mysql_query($query) or die ("Error in query: $query. ".mysql_error());

//Selecciono PK y la adjudico a la clave idPER de personas mediante una variable

$selectPKper="SELECT MAX(idPrimaryPER) ID FROM personas";

$idPER=mysql_query ($selectPKper);
 
 
$query2"INSERT INTO direcciones (idPER,direccion, poblacion, provincia, ZIPCode, pais ) VALUES 

('$idPER','$direccion','$poblacion','$provincia','$ZIPCode','$pais')"
;
 
// execute query 

$result2 mysql_query($query2) or die ("Error in query: $query2. ".mysql_error());
 
// print message with ID of inserted record 
echo "New record inserted with ID ".mysql_insert_id(); 

// close connection 
mysql_close($connection); 
¿Alguien sabe como resolver este tema? Se agradecen sugerencias,

Muchas gracias por adelantado,

J.
  #2 (permalink)  
Antiguo 10/12/2010, 04:06
Avatar de Rankxerox1984  
Fecha de Ingreso: septiembre-2010
Mensajes: 253
Antigüedad: 13 años, 7 meses
Puntos: 4
Respuesta: Error en Insert (...lo hise de nuevo)

Hola Again:

He estado haciendo pruebas con un script aparte y he obtenido esto:

Cita:
Resource id #3
El código es este:
Código PHP:
<?php

//datos de conexion

$connection mysql_connect($host$user$pass) or die ("Unable to connect!"); 
mysql_select_db($db) or die ("Unable to select database!"); 

$selectPKper="SELECT MAX(idPrimaryPER) ID FROM personas";

$idPER=mysql_query ($selectPKper);

echo (
$idPER);
?>
Sin embargo creo que lo que deberia obtener es el valor del campo PK de la tabla personas que servirá para establecer la relación con el K de Direcciones ¿......?
¿Alguien me puede dar una pista sobre el fallo que estoy cometiendo?
Gracias de nuevo,
J.

Cita:
Iniciado por Rankxerox1984 Ver Mensaje
Hola a todos:

Me está resultando de gran ayuda el foro para mis progresos con mi proyecto. Gracias a todos por adelantado. Estoy haciendo un Insert a dos tablas relacionadas. Para ello primero hago el insert a la tabla "madre" y mediante un select obtengo el ultimo PK que convierto mediante el uso de una variable en la K (no PK) de la tabla "hija" una vez obtenida la variable la utilizo como un valor del registro en el insert de esa tabla.

aqui el error obtenido con ese improbo esfuerzo


Y aquí el código que lo origina:


Código PHP:
// open connection 
$connection mysql_connect($host$user$pass) or die ("Unable to connect!"); 

// select database 
mysql_select_db($db) or die ("Unable to select database!"); 

// creo query

 
$query "INSERT INTO personas (nombre,apellido1,apellido2,usuario,clave) VALUES ('$nombre', 

'$apellido1','$apellido2','$usuario','$clave')"
;

// ejecuto query
$result mysql_query($query) or die ("Error in query: $query. ".mysql_error());

//Selecciono PK y la adjudico a la clave idPER de personas mediante una variable

$selectPKper="SELECT MAX(idPrimaryPER) ID FROM personas";

$idPER=mysql_query ($selectPKper);
 
 
$query2"INSERT INTO direcciones (idPER,direccion, poblacion, provincia, ZIPCode, pais ) VALUES 

('$idPER','$direccion','$poblacion','$provincia','$ZIPCode','$pais')"
;
 
// execute query 

$result2 mysql_query($query2) or die ("Error in query: $query2. ".mysql_error());
 
// print message with ID of inserted record 
echo "New record inserted with ID ".mysql_insert_id(); 

// close connection 
mysql_close($connection); 
¿Alguien sabe como resolver este tema? Se agradecen sugerencias,

Muchas gracias por adelantado,

J.
  #3 (permalink)  
Antiguo 10/12/2010, 05:26
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Error en Insert (...lo hise de nuevo)

SI un número de ID es autonumérico, simplemente no lo envíes, no tiene sentido, especialmente cuando estás invocando uno por uno los campos:
Código MySQL:
Ver original
  1. INSERT INTO direcciones (direccion, poblacion, provincia, ZIPCode, pais )
  2. VALUES ('$direccion','$poblacion','$provincia','$ZIPCode','$pais')
Si vas a poner sólo el nombre de la tabla y no indicar qué columnas ingresarás, entonces en lugar de omitirlo, le envías NULL, pero NULL como valor SQL, no como cadena:
Código MySQL:
Ver original
  1. INSERT INTO direcciones
  2. VALUES (NULL, '$direccion', '$poblacion', '$provincia', '$ZIPCode', '$pais')
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 10/12/2010, 11:56
Avatar de Rankxerox1984  
Fecha de Ingreso: septiembre-2010
Mensajes: 253
Antigüedad: 13 años, 7 meses
Puntos: 4
Respuesta: Error en Insert (...lo hise de nuevo)

Hola gnzsoloyo:

En primer lugar gracias por interesarte por el tema.
De todos modos, no entiendo como las sugerencias que tu me haces conseguirán que se establezca relación entre los registros de las dos tablas de manera que cada persona tenga la dirección que le corresponda.
Yo había diseñado con phpmyadmin un enlace de uno a varios desde la PK de personas a la K de Direcciones y esperaba que al recuperar con el select el ultimo valor de PK de personas (autonumérico) lo pudiera introducir mediante la variable en el campo K de Direcciones estableciendo así la relación entre las tablas.
...Aunque seguro que estoy equivocado y no se hace así ¿no?

Muchas gracias por tu ayuda,
  #5 (permalink)  
Antiguo 10/12/2010, 13:42
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Error en Insert (...lo hise de nuevo)

Yo te estaba respondiendo el primero post, donde planteas el primer problema:
Cita:
Error in query: INSERT INTO direcciones (idPER,direccion, poblacion, provincia, ZIPCode, pais ) VALUES ('Resource id #3','calvet 3456 12 3','Barcelona','Barcelona','087456',''). Duplicate entry '0' for key 'PRIMARY'
El resto es para otra respuesta, pero te doy una pista:
Si la primera inserción está usando un campo autonumerico, ¿para qué haces un nuevo select, que en realidad no te devuelve un valor sino un resource, el que no estás leyendo?
¿Por qué no haces directamente:
Código PHP:
Ver original
  1. $selectPKper = mysql_insert_id();
luego de insertar la persona?
Así tendría sel valor que necesitas para la segunda (siempre que valga más que cero).
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: insert
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 18:32.