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

Problema con MYSQL

Estas en el tema de Problema con MYSQL en el foro de Mysql en Foros del Web. Miren, mi problema es el siguiente: Tengo la MYSQL y un sistema de login, el sistma tenía en la BD: id smallint auto_increment YO AHORA ...
  #1 (permalink)  
Antiguo 12/03/2012, 20:37
 
Fecha de Ingreso: julio-2010
Mensajes: 158
Antigüedad: 9 años, 4 meses
Puntos: 1
Problema con MYSQL

Miren, mi problema es el siguiente:

Tengo la MYSQL y un sistema de login, el sistma tenía en la BD: id smallint auto_increment YO AHORA NECESITO QUE sea INT, pero cuando el usuario se registra me dice

Could not insert data because Incorrect integer value: '' for column 'id' at row 1
  #2 (permalink)  
Antiguo 13/03/2012, 11:24
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 12 años, 11 meses
Puntos: 447
Respuesta: Problema con MYSQL

Hola ameno123:

Vayamos por partes... en primer lugar, para cambiar de tipo de dato de tu tabla lo harías con un ALTER TABLE, más o menos así.

Código MySQL:
Ver original
  1. mysql> CREATE TABLE tabla(
  2.     -> campo VARCHAR(20) NOT NULL,
  3.     -> PRIMARY KEY (id));
  4. Query OK, 0 rows affected (0.16 sec)
  5.  
  6. mysql> DESC tabla;
  7. +-------+----------------------+------+-----+---------+----------------+
  8. | Field | Type                 | Null | Key | Default | Extra          |
  9. +-------+----------------------+------+-----+---------+----------------+
  10. | id    | smallint(5) unsigned | NO   | PRI | NULL    | auto_increment |
  11. | campo | varchar(20)          | NO   |     | NULL    |                |
  12. +-------+----------------------+------+-----+---------+----------------+
  13. 2 rows in set (0.03 sec)
  14.  
  15. mysql> #Para cambiar el tipo de la columna ID, de SMALLINT a INT
  16. mysql> ALTER TABLE tabla
  17. Query OK, 0 rows affected (0.39 sec)
  18. Records: 0  Duplicates: 0  Warnings: 0
  19.  
  20. mysql> DESC tabla;
  21. +-------+------------------+------+-----+---------+----------------+
  22. | Field | Type             | Null | Key | Default | Extra          |
  23. +-------+------------------+------+-----+---------+----------------+
  24. | id    | int(11) unsigned | NO   | PRI | NULL    | auto_increment |
  25. | campo | varchar(20)      | NO   |     | NULL    |                |
  26. +-------+------------------+------+-----+---------+----------------+
  27. 2 rows in set (0.03 sec)

Ahora bien, el problema con el INSERT es QUE NO LE ESTÁS ASIGNANDO NINGÚN VALOR AL CAMPO ID, si lo estás recuperando de algún parámetro en tu página es posible que el parámetro le esté llegando como una cadena vacía. Sin embargo NO ES RECOMENDABLE ASIGNARLES VALORES A CAMPOS AUTOINCREMENTALES, es preferible simplemente omitir este campo en el insert o en su defecto enviar siempre un NULL. Observa las diferentes formas en que puedes insertar datos en la tabla:

Código MySQL:
Ver original
  1. mysql> INSERT INTO tabla (id, campo) VALUES (1, 'uno');
  2. Query OK, 1 row affected (0.28 sec)
  3.  
  4. mysql> INSERT INTO tabla (id, campo) VALUES (NULL, 'dos');
  5. Query OK, 1 row affected (0.11 sec)
  6.  
  7. mysql> INSERT INTO tabla (campo) VALUES ('tres');
  8. Query OK, 1 row affected (0.13 sec)
  9.  
  10. mysql> INSERT INTO tabla VALUES (4, 'cuatro');
  11. Query OK, 1 row affected (0.09 sec)
  12.  
  13. mysql> INSERT INTO tabla VALUES (NULL, 'cinco');
  14. Query OK, 1 row affected (0.06 sec)
  15.  
  16. mysql> SELECT * FROM tabla;
  17. +----+--------+
  18. | id | campo  |
  19. +----+--------+
  20. |  1 | uno    |
  21. |  2 | dos    |
  22. |  3 | tres   |
  23. |  4 | cuatro |
  24. |  5 | cinco  |
  25. +----+--------+
  26. 5 rows in set (0.03 sec)

El problema al asignar un valor fijo a un campo ID (como en los ejemplos 1 y 4) es que si el valor ya existe en la BD te marque un problema de duplicados:

Código MySQL:
Ver original
  1. mysql> INSERT INTO tabla VALUES (4, 'otro cuatro');
  2. ERROR 1062 (23000): Duplicate entry '4' for key 'PRIMARY'

En lo particular prefiero utilizar la forma del ejemplo tres, donde se listan los campos que quieres insertar PERO SE OMITEN LOS CAMPOS INCREMENTALES

Saludos
Leo.
  #3 (permalink)  
Antiguo 14/03/2012, 18:23
 
Fecha de Ingreso: julio-2010
Mensajes: 158
Antigüedad: 9 años, 4 meses
Puntos: 1
Respuesta: Problema con MYSQL

Yo le mando un NULL y me tira rror, no s por que. Mira:

Código PHP:
$insert mysql_query("insert into $table values ('NULL', '".$_POST['username']."', '".$_POST['password']."', '".$_POST['name1']."', '".$_POST['name2']."', '".$_POST['email']."', '".$_POST['website']."', 'images/avatar.jpg')")
or die(
"Could not insert data because ".mysql_error()); 
Pero me tira error, cuando reemplce el NULL por un 1, anda pero no sigue incrementando por que puse 1
  #4 (permalink)  
Antiguo 14/03/2012, 19:01
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.321
Antigüedad: 12 años
Puntos: 2653
Respuesta: Problema con MYSQL

Eso no es un NULL, es una cadena de texto que dice "NULL", que no es lo mismo. Los valores NULL se envían sin apóstrofos, como los números o los booleanos.
__________________
¿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: usuarios
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 20:17.