| |||
Problema Clave Primaria He hecho una tabla en mysql, y he puesto como clave primaria un campo llamado cod_material, en tipo le he puesto varchar y en longitud 6. Yo este campo lo quiero para almacenar códigos de materiales, y cuando meto los códigos a traves de php si son números no me da problema, pero si en el codigo van letras si que me da problemas, es decir un codigo de 5 caracteres como puede ser 00001, no da problemas, pero si pongo a0001, si que me los da, porque ocurre esto, ¿Alguien me puede ayudar? |
| ||||
Respuesta: Problema Clave Primaria Cita: Sin ver el código me imagino que estás asignando el valor poniendo la cifra en el VALUE() del INSERT, pero no la estás encerrando entre apóstrofes... ¿no?
Iniciado por senit He hecho una tabla en mysql, y he puesto como clave primaria un campo llamado cod_material, en tipo le he puesto varchar y en longitud 6. Yo este campo lo quiero para almacenar códigos de materiales, y cuando meto los códigos a traves de php si son números no me da problema, pero si en el codigo van letras si que me da problemas, es decir un codigo de 5 caracteres como puede ser 00001, no da problemas, pero si pongo a0001, si que me los da, porque ocurre esto, ¿Alguien me puede ayudar? El tema es que cuando pones un número para ser asignado a un campo VARCHAR, lo tienes que poner entre apóstrofes para que sea una cadena:
Código MySQL:
Si lo pones sin ellos y es número, MySQL hace una conversión implícita y pone la cadena.Ver original Pero cuando lo pones así:
Código MySQL:
MySQL asume que a0001 es un nombre de columna, pero no una cadena. En esos caso tienes que ponerlo si o si entre apóstrofes pues no existe conversión implícita para esos casos. Ver original
__________________ ¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente... "El problema es la interfase silla-teclado." (Gillermo Luque) |
| |||
Respuesta: Problema Clave Primaria Esta es mi query: $query = "insert into materiales (COD_MATER, NOMBRE, PRECIO) values ('".$codigo."','".$nombre."','".$precio."')"; los valores los cojo de un formulario, y si que me los inserta, tanto si pongo 00001 como si pongo a0001, pero el problema viene luego cuando hago una consulta e intento acceder a dicho registro utilizando el codigo, cuando utilizo a0001, no accede al registro que lo contiene. Gracias y saludos |
| |||
Respuesta: Problema Clave Primaria No me funciona en ninguna consulta, por ejemplo en la que pongo a continuación: $query = "DELETE FROM materiales WHERE COD_MATER = $cod"; Yo hago un listado de materiales, y dejo la opción de modificarlos y de borrarlos mediante 2 enlaces y pasandole el codigo, pues como comentaba en el post anterior, si el codigo son solo números me funciona perfectamente, pero si incluye letras no. Gracias y saludos |
| ||||
Respuesta: Problema Clave Primaria Bueno, es en esencia el mismo problema... Sólo que no lo estás infieriendo. Si COD_MATER es un VARCHAR, para que el WHERE funcione debe compararse con una cadena, y eso no es lo que estás haciendo cuando lo que hay en la variable $cod es a0001. Tal y como la usas, la consulta, si el valor es el "a0001", quedaría:
Código MySQL:
Donde "a0001" es interpretado como nombre de campo, por la simple razón de que comienza con una letra. Si lo que pones es "0001" lo interpreta bien porque lo interpreta como un uno (1) y hace la conversión implícita.Ver original Lo que debe quedar en la consulta es:
Código MySQL:
Esto sí compara una cadena con un VARCHAR.Ver original ¿Se entiende la diferencia? Con lo que te comentaba en el primer post podrías haberlo inferido: Cita: Esto se da siempre... no solamente en un INSERT. MySQL asume que a0001 es un nombre de columna, pero no una cadena. En esos caso tienes que ponerlo si o si entre apóstrofes pues no existe conversión implícita para esos casos.
__________________ ¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente... "El problema es la interfase silla-teclado." (Gillermo Luque) |
| ||||
Respuesta: Problema Clave Primaria
__________________ ¿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: |