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

[SOLUCIONADO] Error al realizar un update

Estas en el tema de Error al realizar un update en el foro de Bases de Datos General en Foros del Web. Muy buenas! Me ha surgido un error a la hora de realizar un update en una tabla. Este es el error que me muestra: @import ...
  #1 (permalink)  
Antiguo 05/04/2016, 06:14
 
Fecha de Ingreso: abril-2016
Mensajes: 36
Antigüedad: 8 años, 1 mes
Puntos: 0
Error al realizar un update

Muy buenas!
Me ha surgido un error a la hora de realizar un update en una tabla.
Este es el error que me muestra:
Código SQL:
Ver original
  1. UPDATE nomisferio SET ID_Nomisferio='1', ID_Categoria='1', Tipo_Mes='28', Sueldo='605.25', Antiguedad='18.08', Dif_Ant='14.39', C_Puesto='716.64', C_Niv_Retr='3.28', C_Destino='395.84', C_Prof_1='120.08', C_Prof_2='240.33', C_Prof_3='320.62', C_Prof_4='440.52', C_Fest_Dia='43.54', C_Fest_Noche='62.20', Hospital='68.81', Nocturnidad='29.00', J_Partida='200.69';Duplicate entry '1' FOR KEY 'PRIMARY'
No entiendo porque me ocurre este error, ya que aún poniendo un ID que no esta en la tabla me sale el mismo error.

Si alguien pudiera ayudarme me seria de gran ayuda.
Muchas gracias.
Un saludo.
  #2 (permalink)  
Antiguo 05/04/2016, 06:43
 
Fecha de Ingreso: octubre-2010
Ubicación: España
Mensajes: 1.007
Antigüedad: 13 años, 6 meses
Puntos: 123
Respuesta: Error al realizar un update

Pudiste solucionarlo con lo que te indique aquí en el otro tema?

Cita:
Iniciado por xerifandtomas Ver Mensaje
El problema es que en tu sentencia al no establecer un condicionante where para la consulta, estas modificando todos los registros de la tabla, y por tanto el PK de todos los registros queda a 1, por lo que se duplica la PK.


Fijate en lo sigiente:
Código SQL:
Ver original
  1. UPDATE tabla SET campo=valor
Código SQL:
Ver original
  1. UPDATE tabla SET campo=valor WHERE mi_pk=1

La primera modifica todos los registros ya que no indicamos cual en concreto queremos modificar

La segunda solo afecta a los registros donde mi_pk sea igual a 1

Espero se entienda, para una explicación más detallada, prueba a preguntar en el subforo de base de datos, ya que esto ya no tiene que ver con php.
__________________
Unset($vida['malRollo']);
  #3 (permalink)  
Antiguo 05/04/2016, 07:34
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 al realizar un update

Parafraseando a xerifandtomas: ¿Dónde está el WHERE?
Asumo que tienes claro que si no le indicas una condición al UPDATE, intentará hacer los cambios en TODOS los registros, sin distinciones. ¿no?

Por otro lado, una pregunta simple: Si es un UPDATE, por qué estás mandando a actualziar la clave primaria?
Eso no tiene sentido. La clave primaria, especialmente cundo se un AI, se crea al momento del INSERT y NO SE MODIFICA NUNCA.
Pero tu estás enviando un
Código MySQL:
Ver original
  1. SET ID_Nomisferio='1'
un campo que por su nombre, debe ser la PK de esa tabla, ¿no?
__________________
¿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 06/04/2016, 00:10
 
Fecha de Ingreso: abril-2016
Mensajes: 36
Antigüedad: 8 años, 1 mes
Puntos: 0
Respuesta: Error al realizar un update

Cita:
Iniciado por xerifandtomas Ver Mensaje
Pudiste solucionarlo con lo que te indique aquí en el otro tema?
Lo probé pero me salía otro error. Especifico en el WHERE que recoja el valor de la clave primaria de ese registro.

Es decir, con la modificación, le sentencia queda así:
Código SQL:
Ver original
  1. UPDATE nomisferio SET ID_Nomisferio='" . $ID_Nomisferio . "', ID_Categoria='" . $ID_Categoria . "',
  2. Tipo_Mes='" . $Tipo_Mes . "', Sueldo='" . $Sueldo . "', Antiguedad='" . $Antiguedad . "',
  3. Dif_Ant='" . $Dif_Ant . "', C_Puesto='" . $C_Puesto . "', C_Niv_Retr='" . $C_Niv_Retr . "',
  4. C_Destino='" . $C_Destino . "', C_Prof_1='" . $C_Prof_1 . "', C_Prof_2='" . $C_Prof_2 . "',
  5. C_Prof_3='" . $C_Prof_3 . "',C_Prof_4='". $C_Prof_4 . "', C_Fest_Dia='" . $C_Fest_Dia . "',
  6. C_Fest_Noche='". $C_Fest_Noche . "', Hospital='". $Hospital . "', Nocturnidad='" . $Nocturnidad . "',
  7.  J_Partida='". $J_Partida . "
  8. WHERE ID_Nomisferio='" . $ID_Nomisferio . "';

Cita:
Editado: Código de programación no permitido en foros de Bases de Datos.
Leer las normas del foro, por favor.

El error que me muestra con la modificación es:
Código SQL:
Ver original
  1. UPDATE nomisferio SET ID_Nomisferio='1', ID_Categoria='1', Tipo_Mes='28', Sueldo='605.25', Antiguedad='23', Dif_Ant='14.39', C_Puesto='716.64', C_Niv_Retr='3.28', C_Destino='395.84', C_Prof_1='120.08', C_Prof_2='240.33', C_Prof_3='320.62', C_Prof_4='440.52', C_Fest_Dia='43.54', C_Fest_Noche='62.20', Hospital='68.81', Nocturnidad='29.00', J_Partida='200.69 WHERE ID_Nomisferio='1';You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '1'' at line 5

Última edición por gnzsoloyo; 06/04/2016 a las 04:39
  #5 (permalink)  
Antiguo 06/04/2016, 00:17
 
Fecha de Ingreso: abril-2016
Mensajes: 36
Antigüedad: 8 años, 1 mes
Puntos: 0
Respuesta: Error al realizar un update

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Parafraseando a xerifandtomas: ¿Dónde está el WHERE?
Asumo que tienes claro que si no le indicas una condición al UPDATE, intentará hacer los cambios en TODOS los registros, sin distinciones. ¿no?

Por otro lado, una pregunta simple: Si es un UPDATE, por qué estás mandando a actualziar la clave primaria?
Eso no tiene sentido. La clave primaria, especialmente cundo se un AI, se crea al momento del INSERT y NO SE MODIFICA NUNCA.
Pero tu estás enviando un
Código MySQL:
Ver original
  1. SET ID_Nomisferio='1'
un campo que por su nombre, debe ser la PK de esa tabla, ¿no?
Si, el no haber puesto el WHERE es un fallo que hice que no me dí cuenta, pero de todos modos, después de ponerlo me muestra otro error.
Que puedo hacer para evitar ese fallo? A la hora de añadir y eliminar un registro no me sale ningún error, es decir, la acción se realiza correctamente.
  #6 (permalink)  
Antiguo 06/04/2016, 01:31
 
Fecha de Ingreso: octubre-2010
Ubicación: España
Mensajes: 1.007
Antigüedad: 13 años, 6 meses
Puntos: 123
Respuesta: Error al realizar un update

El último error es debido a que te falta una comilla, revisa tu consulta.
__________________
Unset($vida['malRollo']);
  #7 (permalink)  
Antiguo 06/04/2016, 01:40
 
Fecha de Ingreso: abril-2016
Mensajes: 36
Antigüedad: 8 años, 1 mes
Puntos: 0
Respuesta: Error al realizar un update

Cita:
Iniciado por xerifandtomas Ver Mensaje
El último error es debido a que te falta una comilla, revisa tu consulta.
La verdad que no encuentro el fallo en el código. Modificando un par de cosas he conseguido que el único error que me muestre sea el siguiente:
Código SQL:
Ver original
  1. You have an error IN your SQL syntax; CHECK the manual that corresponds TO your MySQL server version FOR the RIGHT syntax TO USE near '1'' at line 5

Es decir, ya no me muestra la consulta y el error, si no solamente el error, puede que sea un pequeño avance
  #8 (permalink)  
Antiguo 06/04/2016, 04:52
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 al realizar un update

Cita:
Iniciado por ivan7 Ver Mensaje
El error que me muestra con la modificación es:
Código SQL:
Ver original
  1. UPDATE nomisferio SET ID_Nomisferio='1', ID_Categoria='1',
  2. Tipo_Mes='28', Sueldo='605.25', Antiguedad='23', Dif_Ant='14.39', C_Puesto='716.64',
  3.  C_Niv_Retr='3.28', C_Destino='395.84', C_Prof_1='120.08', C_Prof_2='240.33',
  4. C_Prof_3='320.62', C_Prof_4='440.52', C_Fest_Dia='43.54', C_Fest_Noche='62.20',
  5. Hospital='68.81', Nocturnidad='29.00', J_Partida='200.69 WHERE ID_Nomisferio='1';
  6. You have an error in your SQL syntax; check the manual that corresponds to your MySQL
  7. server version for the right syntax to use near '1'' at line 5
El error en realidad es bastante evidente: El último valor no tiene cerrado el apóstrofo...

El problema se ve claramente cuando escribes el código bien estructurado, y además usas un corrector sintáctico que entienda SQL:
Código MySQL:
Ver original
  1. UPDATE nomisferio
  2.     SET
  3.     ID_Nomisferio='1', # Por qué está esta línea? No se modifican las PK.
  4.     ID_Categoria='1',
  5.     Tipo_Mes='28',
  6.     Sueldo='605.25',
  7.     Antiguedad='23',
  8.     Dif_Ant='14.39',
  9.     C_Puesto='716.64',
  10.     C_Niv_Retr='3.28',
  11.     C_Destino='395.84',
  12.     C_Prof_1='120.08',
  13.     C_Prof_2='240.33',
  14.     C_Prof_3='320.62',
  15.     C_Prof_4='440.52',
  16.     C_Fest_Dia='43.54',
  17.     C_Fest_Noche='62.20',
  18.     Hospital='68.81',
  19.     Nocturnidad='29.00',
  20.     J_Partida='200.69 WHERE ID_Nomisferio='1';

¿Ver como la última linea se resalta mal?
Bueno, eso.

Por otro lado, hay algo que no me respondiste: ¿Por qué estás incluyendo la PK entre los campos que modificas
Eso no tiene ningún sentido.

Algunos consejos:

1) Usa una interfaz que tenga corrector sintáctico para SQL cuando estés creando las sentencias para la base. Evitará errores elementales como ese.
2) Escribe las sentencias en forma estructurada, con indentados de párrafo. Ayuda a ver claramente lo que contiene y encuentras rápidamente errores. Hacerlas como un largo chorizo de texto las hace ilegibles.
3) Respeta los espacios detrás de las comas. Ayuda a evitar la ilegibilidad del código.
4) NO PONGAS valores numéricos entre apóstrofos, si el campo es numérico. Es innecesario, obliga a MySQL a realizar conversiones implícitas que pueden fallar, esconde errores por datos faltantes de la IF visual, y no permite validar correctamente el rango o dato que se ingresa.

Código MySQL:
Ver original
  1. UPDATE nomisferio
  2.     ID_Categoria = 1,
  3.     Tipo_Mes = 28,
  4.     Sueldo = 605.25,
  5.     Antiguedad = 23,
  6.     Dif_Ant = 14.39,
  7.     C_Puesto = 716.64,
  8.     C_Niv_Retr = 3.28,
  9.     C_Destino = 395.84,
  10.     C_Prof_1 = 120.08,
  11.     C_Prof_2 = 240.33,
  12.     C_Prof_3 = 320.62,
  13.     C_Prof_4 = 440.52,
  14.     C_Fest_Dia = 43.54,
  15.     C_Fest_Noche = 62.20,
  16.     Hospital = 68.81,
  17.     Nocturnidad = 29.00,
  18.     J_Partida = 200.69
  19.     ID_Nomisferio = 1;
__________________
¿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 06/04/2016, 05:07
 
Fecha de Ingreso: abril-2016
Mensajes: 36
Antigüedad: 8 años, 1 mes
Puntos: 0
Respuesta: Error al realizar un update

Cita:
Iniciado por gnzsoloyo Ver Mensaje
El error en realidad es bastante evidente: El último valor no tiene cerrado el apóstrofo...

El problema se ve claramente cuando escribes el código bien estructurado, y además usas un corrector sintáctico que entienda SQL:
Código MySQL:
Ver original
  1. UPDATE nomisferio
  2.     SET
  3.     ID_Nomisferio='1', # Por qué está esta línea? No se modifican las PK.
  4.     ID_Categoria='1',
  5.     Tipo_Mes='28',
  6.     Sueldo='605.25',
  7.     Antiguedad='23',
  8.     Dif_Ant='14.39',
  9.     C_Puesto='716.64',
  10.     C_Niv_Retr='3.28',
  11.     C_Destino='395.84',
  12.     C_Prof_1='120.08',
  13.     C_Prof_2='240.33',
  14.     C_Prof_3='320.62',
  15.     C_Prof_4='440.52',
  16.     C_Fest_Dia='43.54',
  17.     C_Fest_Noche='62.20',
  18.     Hospital='68.81',
  19.     Nocturnidad='29.00',
  20.     J_Partida='200.69 WHERE ID_Nomisferio='1';

¿Ver como la última linea se resalta mal?
Bueno, eso.

Por otro lado, hay algo que no me respondiste: ¿Por qué estás incluyendo la PK entre los campos que modificas
Eso no tiene ningún sentido.

Algunos consejos:

1) Usa una interfaz que tenga corrector sintáctico para SQL cuando estés creando las sentencias para la base. Evitará errores elementales como ese.
2) Escribe las sentencias en forma estructurada, con indentados de párrafo. Ayuda a ver claramente lo que contiene y encuentras rápidamente errores. Hacerlas como un largo chorizo de texto las hace ilegibles.
3) Respeta los espacios detrás de las comas. Ayuda a evitar la ilegibilidad del código.
4) NO PONGAS valores numéricos entre apóstrofos, si el campo es numérico. Es innecesario, obliga a MySQL a realizar conversiones implícitas que pueden fallar, esconde errores por datos faltantes de la IF visual, y no permite validar correctamente el rango o dato que se ingresa.

Código MySQL:
Ver original
  1. UPDATE nomisferio
  2.     ID_Categoria = 1,
  3.     Tipo_Mes = 28,
  4.     Sueldo = 605.25,
  5.     Antiguedad = 23,
  6.     Dif_Ant = 14.39,
  7.     C_Puesto = 716.64,
  8.     C_Niv_Retr = 3.28,
  9.     C_Destino = 395.84,
  10.     C_Prof_1 = 120.08,
  11.     C_Prof_2 = 240.33,
  12.     C_Prof_3 = 320.62,
  13.     C_Prof_4 = 440.52,
  14.     C_Fest_Dia = 43.54,
  15.     C_Fest_Noche = 62.20,
  16.     Hospital = 68.81,
  17.     Nocturnidad = 29.00,
  18.     J_Partida = 200.69
  19.     ID_Nomisferio = 1;
En el código de la modificación no pongo la PK para modificarla, lo único que en el error lo muestra porque forma parte de "la consulta", no se si me explico bien.

El código de la update modificada es la siguiente:
Código SQL:
Ver original
  1. UPDATE nomisferio SET ID_Categoria='" . $ID_Categoria . "',
  2. Tipo_Mes='" . $Tipo_Mes . "',
  3. Sueldo='" . $Sueldo . "',
  4. Antiguedad='" . $Antiguedad . "',
  5. Dif_Ant='" . $Dif_Ant . "',
  6. C_Puesto='" . $C_Puesto . "',
  7. C_Niv_Retr='" . $C_Niv_Retr . "',
  8. C_Destino='" . $C_Destino . "',
  9. C_Prof_1='" . $C_Prof_1 . "',
  10. C_Prof_2='" . $C_Prof_2 . "',
  11. C_Prof_3='" . $C_Prof_3 . "',
  12. C_Prof_4='". $C_Prof_4 . "',
  13. C_Fest_Dia='" . $C_Fest_Dia . "',
  14. C_Fest_Noche='". $C_Fest_Noche . "',
  15. Hospital='". $Hospital . "',
  16. Nocturnidad='" . $Nocturnidad . "',
  17. J_Partida='". $J_Partida . "   
  18. WHERE=ID_Nomisferio='" . $ID_Nomisferio . "';

Cita:
Editado: Código de programación no permitido en foros de Bases de Datos.
Leer las normas del foro, por favor.
Lo que he hecho ha sido eliminar la PK de la consulta e introducir el WHERE recogiendo el valor de la PK.
Mediante esta consulta lo que se hace es introducir los valores que ya tiene cada registro. Es decir, ID_Categoria tendrá el valor que tiene el registro en ese mismo campo... y así con todos los campos.

Última edición por gnzsoloyo; 06/04/2016 a las 05:13
  #10 (permalink)  
Antiguo 06/04/2016, 05:13
 
Fecha de Ingreso: abril-2016
Mensajes: 36
Antigüedad: 8 años, 1 mes
Puntos: 0
Respuesta: Error al realizar un update

Bueno, decir que el fallo ya está solucionado.
La verdad que no sé como lo habré solucionado, pero he tocado un par de cosas del código y ya me funciona.
Muchas gracias por vuestra ayuda.
Un saludo!
  #11 (permalink)  
Antiguo 06/04/2016, 05:17
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 al realizar un update

NO estás leyendo lo que te digo...
Por favor, presta atención a lo que se te explica, leelo con atención:

Cita:
El último valor no tiene cerrado el apóstrofo...
Cita:
1) Usa una interfaz que tenga corrector sintáctico para SQL cuando estés creando las sentencias para la base. Evitará errores elementales como ese.
Cita:
4) NO PONGAS valores numéricos entre apóstrofos, si el campo es numérico. Es innecesario, obliga a MySQL a realizar conversiones implícitas que pueden fallar, esconde errores por datos faltantes de la IF visual, y no permite validar correctamente el rango o dato que se ingresa.
No corregiste el primer problema que te mencioné.

Cita:
En el código de la modificación no pongo la PK para modificarla, lo único que en el error lo muestra porque forma parte de "la consulta", no se si me explico bien.
Todo lo que pones en el SET es para MODIFICAR. Por favor, lee alguna referencia del lenguaje SQL, porque ese es un error grave.


Finalmente: Por favor, elimina las partes de PHP que no corresponden a la sentencia SQL.
No se permiten códigos de ningún lenguaje de programación en los foros de BBDD.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #12 (permalink)  
Antiguo 06/04/2016, 05:22
 
Fecha de Ingreso: abril-2016
Mensajes: 36
Antigüedad: 8 años, 1 mes
Puntos: 0
Respuesta: Error al realizar un update

Cita:
Iniciado por gnzsoloyo Ver Mensaje
NO estás leyendo lo que te digo...
Por favor, presta atención a lo que se te explica, leelo con atención:





No corregiste el primer problema que te mencioné.

Finalmente: Por favor, elimina las partes de PHP que no corresponden a la sentencia SQL.
No se permiten códigos de ningún lenguaje de programación en los foros de BBDD.
En la consulta modificada, si te fijas bien, ya no aparece en el SET el ID_Nomisferio, ahora el primer valor para modificar es el ID_Categoria, el ID_Nomisferio lo he trasladado al WHERE.
Los apóstrofos de los números no los pongo yo, se mostraban a la hora de visualizar el error, lo hacía automáticamente.
Y respondiendo a lo de que meto código no válido para el foro de BBDD decir que soy un usuario nuevo y aún no domino las normas o leyes de los foros...
Muchas gracias por la ayuda.
  #13 (permalink)  
Antiguo 06/04/2016, 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 al realizar un update

Cita:
Iniciado por ivan7 Ver Mensaje
Los apóstrofos de los números no los pongo yo, se mostraban a la hora de visualizar el error, lo hacía automáticamente.
Y respondiendo a lo de que meto código no válido para el foro de BBDD decir que soy un usuario nuevo y aún no domino las normas o leyes de los foros...
Muchas gracias por la ayuda.
Los apóstrofos en los números los estás poniendo tu mismo en el código PHP. No los inventa MySQL.

TEn en cuenta que cuando creas código SQL en forma dinámica, por medio de algún lenguaje de programación, el SQL resultante debe respetar las reglas sintácticas y las metodologías del SQL.
Ni PHP ni ningún lenguaje de programación entiende SQL. Son lenguajes diferentes y no relacionados.

En cuanto a las reglas de los foros de BBDD, te puse dos veces el link junto con la edición.
Por favor, lee los links que se te ponen. El de BBDD no es el unico subforo que tiene reglas particulares.
__________________
¿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: tabla, update
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 04:48.