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

Problema al hacer varios inserts en bucle

Estas en el tema de Problema al hacer varios inserts en bucle en el foro de Mysql en Foros del Web. Hola a tod@s; A ver si me pueden ayudar porque ando desesperado. Tenía un código que funcionaba perfectamente, pero al migrar de servidor me está ...
  #1 (permalink)  
Antiguo 02/11/2009, 18:51
Avatar de forecast  
Fecha de Ingreso: octubre-2004
Mensajes: 259
Antigüedad: 19 años, 6 meses
Puntos: 4
Busqueda Problema al hacer varios inserts en bucle

Hola a tod@s;

A ver si me pueden ayudar porque ando desesperado.

Tenía un código que funcionaba perfectamente, pero al migrar de servidor me está dando problemas.

Tenía un bucle que realizaba inserciones en BBDD.

Código PHP:
foreach($valores as $index=>$value)
{
    
$sql="INSERT INTO tabla (valor) VALUES ($value)";
    
mysql_query($sql);

Las consultas están bien (lo de arriba es para explicar un poco), pues me funcionaba en el antiguo servidor, pero en el nuevo me da un error clave duplicada.

Por ejemplo #1062 - Duplicate entry '2147483647' for key 1

Si printo las consultas que estoy haciendo veo que ese id es el primero de las consultas del array y que el resto de consultas que me dan error tiene un id diferente y único con lo cual no debería aparecer el error de 'duplicate entry' es como si el 'mysql_query' no se ejecutara...

He visto por ahí algo sobre una instrucción 'commit', pero no acabo de entender si es necesario o no, porque insisto, este código me funcionaba.

¿Alguien sabe como puedo solucionar este problema?

Saludos.
  #2 (permalink)  
Antiguo 02/11/2009, 19:12
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Problema al hacer varios inserts en bucle

forecast

el error es claro.
Tienes un campo con primary key o unique key al cual le tratas de insertar un valor que ya existe.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 03/11/2009, 03:03
Avatar de forecast  
Fecha de Ingreso: octubre-2004
Mensajes: 259
Antigüedad: 19 años, 6 meses
Puntos: 4
Respuesta: Problema al hacer varios inserts en bucle

Hola Huesos52;

Lo se que el error es claro... pero el id no existe.

Imagínate que en el bucle ejecuto 3 consultas.

La primera con id=1
La segunda con id=2
La tercera con id=3

La primera la introduce, pero la segunda me da el error de 'duplicate key' y me dice que el key repetido es 1, ahora bien si printo la consulta me deja bien claro que el valor que quiero introducir es el 2, que no existe.

Espero explicarme con claridad... un saludo.
  #4 (permalink)  
Antiguo 03/11/2009, 05:07
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: Problema al hacer varios inserts en bucle

Dos preguntas:
- ¿El valor que introduces, es la PK o es otro campo?
- ¿Cuál es el tipo de dato que tiene esa PK: TINYINT, SMALLINT, MEDIUMINT INT o BIGINT.?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 03/11/2009, 06:44
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Problema al hacer varios inserts en bucle

Pienso que el problema está en el uso de foreach de php.
Creo que en este foro te pueden dar mejor soporte de lo que pasa.
Ya reporté tu mensaje.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #6 (permalink)  
Antiguo 03/11/2009, 07:13
Avatar de forecast  
Fecha de Ingreso: octubre-2004
Mensajes: 259
Antigüedad: 19 años, 6 meses
Puntos: 4
Respuesta: Problema al hacer varios inserts en bucle

Hola de nuevo;

Huesos, el problema no parece ser del bucle... printando las consultas todo parece correcto y los ids van cambiando.

gnzsoloyo, el problema es al insertar una primary key es un int(12)

Al ver las consultas veo que los ids son únicos (no existen en la BBDD) y que cada consulta tiene un id diferente.

En la documentación de php sobre le mysql_query he leido esto

"mysql_query doesnt support multiple queries, a way round this is to use innodb and transactions"

Lo que me extraña es que este código me funcionaba perfectamente en mi antiguo servidor y nunca tuve problemas con la inserción en bucle.

Joder, ando desesperado.

Un saludo y gracias por el tiempo dedicado... y a ver si al final consigo solucionar esto.
  #7 (permalink)  
Antiguo 03/11/2009, 07:28
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Problema al hacer varios inserts en bucle

Vamos paso por paso.

Este es todo tu codigo?

Código php:
Ver original
  1. foreach($valores as $index=>$value)
  2. {
  3.     $sql="INSERT INTO tabla (valor) VALUES ($value)";
  4.     mysql_query($sql);
  5. }

La tabla "tabla" tiene varios campos? alguno es not null?
que tipo de dato es el campo "valor"?
value realmente se incrementa cada que pasa por el foreach?
Cual es la estructura de la tabla? Que tipos de datos manejas y cuales son los constraints?

Entre mas información des, mas fácil será ayudarte.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #8 (permalink)  
Antiguo 03/11/2009, 08:39
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: Problema al hacer varios inserts en bucle

Un detalle notable: 2147483647 es el límite de un campo de tipo INT. Cuando superas eso, se produce un overflow y MySQL intenta ingresar el mismo valor límite, con lo que se viola la unicidad de la clave y salta el error.
Este problema lo he visto solamente cuando algún despistado declara un autoincrement como SMALLINT o TINYINT, pero es raro con los INT (el límite es 2.147.483.647), pero...
¿Has revisado si la tabla está cargada y ha superado la cantidad de registros posibles?
Revisa el valor de AUTO_INCREMENT de esa tabla en INFORMATION_SCHEMA, es posible que esté agotado.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 03/11/2009, 09:21
Avatar de forecast  
Fecha de Ingreso: octubre-2004
Mensajes: 259
Antigüedad: 19 años, 6 meses
Puntos: 4
Respuesta: Problema al hacer varios inserts en bucle

gnzsoloyo me da a mi que va a ser eso del límite...

Estoy metiendo registros de Twitter y como id estoy poniendo el id del tweet y me da a mi que ese número es muuuuuuuuy grande.

Lo pruebo y os comento.

Saludos.
  #10 (permalink)  
Antiguo 03/11/2009, 09:31
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: Problema al hacer varios inserts en bucle

Cualquier cosa modifica el limite y pásalo a BIGINT UNSIGNED.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
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 16:25.