elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  Bases de Datos (Moderador: Carloswaldo)
| | | |-+  [SOLUCIONADO] mysql no usa la variable por defecto cuando no se inserta nada
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [SOLUCIONADO] mysql no usa la variable por defecto cuando no se inserta nada  (Leído 4,863 veces)
gAb1


Desconectado Desconectado

Mensajes: 731


Ver Perfil
[SOLUCIONADO] mysql no usa la variable por defecto cuando no se inserta nada
« en: 3 Abril 2016, 05:42 am »

Hola buenas, estoy teniendo complicaciones para configurar las tablas de mi base de datos y poder trabajar correctamente con la aplicación web php.

Por ejemplo, en un INSERT que hago a X tabla, algunas variables pueden no existir (!isset) por lo que mysql debería introducir en el campo el valor default que se le especifica a la columna cuando se crea la tabla.

Yo uso sqlyog community para crear y gestionar las tablas, y las columnas que pueden ser opcionales les puse un valor default para que no se quede (NULL) y no haya problemas al hacer los select y comprobar el valor. Al principio probé activando la opción "Not Null?" pero al parecer si la variable a insertar no existe da error (diciendo que no puede ser null) pero debería usar el default. Probé desactivando dicha opción pero nada, se sigue quedando la columna (NULL) cuando se insertan variables opcionales que no están declaradas.

¿Cual creeis que puede ser el problema? A lo mejor me creo que el default sirve para esto pero resulta que es para otra cosa (aunque no lo creo)...

Gracias!


« Última modificación: 6 Abril 2016, 16:16 pm por gAb1 » En línea

xiruko


Desconectado Desconectado

Mensajes: 438


Ver Perfil
Re: mysql no usa la variable por defecto cuando no se inserta nada
« Respuesta #1 en: 3 Abril 2016, 14:37 pm »

Hola,

Si tienes una columna con un valor por defecto, y quieres que al hacer INSERT esa columna tome ese valor, simplemente no la pongas en la consulta.

Por ejemplo, supongamos que tienes una tabla de usuarios con los campos nombre, apellido y bloqueado, y por defecto la columna bloqueado es 0. Si quieres introducir un usuario que esté bloqueado harías:

Código
  1. INSERT INTO usuarios (`nombre`, `apellido`, `bloqueado`)
  2. VALUES ('Foo', 'Bar', '1');

Pero si quieres que bloqueado coja el valor por defecto, entonces harías:

Código
  1. INSERT INTO usuarios (`nombre`, `apellido`)
  2. VALUES ('Foo', 'Bar');

Saludos!


En línea

gAb1


Desconectado Desconectado

Mensajes: 731


Ver Perfil
Re: mysql no usa la variable por defecto cuando no se inserta nada
« Respuesta #2 en: 3 Abril 2016, 21:20 pm »

Gracias por responder, pero no era eso lo que queria decir.

El problema creo que es más bien de html o php (es de html pero se soluciona con php...).

Lo que queria decir es que las variables que uso en el insert pueden no estar declaradas ya que son opcionales:

Tengo un formulario de 5 checkboxes y hago un insert a la tabla:

Código
  1. if ($stmt = $mysqli->prepare('INSERT INTO checkboxes (checkbox1, checkbox2, checkbox3, checkbox4, checkbox5) VALUES (?, ?, ?, ?, ?)')) {
  2.    $stmt->bind_param('iiiii', $checkbox1, $checkbox2, $checkbox3, $checkbox4, $checkbox5);
  3.    $stmt->execute();
  4. }

Al ser checkboxes, si no están marcados no se envia nada por lo tanto la variable no se genera y se inserta NULL en la columna.

¿Hay alguna manera de decirle a mysql que si la variable es NULL se inserte el valor por defecto?
En línea

HdM


Desconectado Desconectado

Mensajes: 1.674



Ver Perfil
Re: mysql no usa la variable por defecto cuando no se inserta nada
« Respuesta #3 en: 4 Abril 2016, 12:14 pm »

Creo que te servirá de ayuda:

IFNULL , Ejemplo
En línea

- Nice to see you again -
gAb1


Desconectado Desconectado

Mensajes: 731


Ver Perfil
Re: mysql no usa la variable por defecto cuando no se inserta nada
« Respuesta #4 en: 5 Abril 2016, 05:38 am »

Eso era exactamente lo que necesitaba, gracias.

¿Se puede hacer asi?

Código
  1. VALUES (IFNULL(?, ?, ?, ?, ?, DEFAULT(0)))

A lo mejor es más sencillo usar un operador ternario...
En línea

eLank0
eLhAcKeR r00Lz


Desconectado Desconectado

Mensajes: 1.062



Ver Perfil WWW
Re: mysql no usa la variable por defecto cuando no se inserta nada
« Respuesta #5 en: 5 Abril 2016, 12:30 pm »

¿Y si cuando creas la tabla, le pones valores por defecto a los campos que quieras que lo tengan?

Salu2
En línea

gAb1


Desconectado Desconectado

Mensajes: 731


Ver Perfil
Re: mysql no usa la variable por defecto cuando no se inserta nada
« Respuesta #6 en: 6 Abril 2016, 00:00 am »

Eso es precisamente lo que ya tengo hecho, pero que sin embargo no funciona como me esperaba. Yo configuro una tabla para que sus columnas que puedan ser opcionales tengan un valor default que es el que debería utilizar en caso de que el valor a insertar sea null. Esa es la razón por la que abrí este mensaje.

Le tuve que quitar la opción Not Null? porque daba error al insertar una variable nula.

En línea

HdM


Desconectado Desconectado

Mensajes: 1.674



Ver Perfil
Re: mysql no usa la variable por defecto cuando no se inserta nada
« Respuesta #7 en: 6 Abril 2016, 14:46 pm »

Hola.

Pero es que ambos comportamientos que no esperas, son los correctos. Como indicó xiruko, para que inserte valores por default, deberías omitir esos campos en el insert. En caso contrario, tratará de insertar el valor pasado en la query. Por otro lado, si en la definición del campo indicaste que no permita null y en el insert el valor es null, saltará el error. Debes ser tú, quien controle todo eso por código.
En línea

- Nice to see you again -
gAb1


Desconectado Desconectado

Mensajes: 731


Ver Perfil
Re: mysql no usa la variable por defecto cuando no se inserta nada
« Respuesta #8 en: 6 Abril 2016, 16:15 pm »

Entonces la solución es o bien usar un ternario al declarar la variable:

Código
  1. $checkbox1 = isset($_POST['checkbox1']) && $_POST['checkbox1'] != '' ? filter_input(INPUT_POST, 'checkbox1', FILTER_SANITIZE_STRING) : 0;

O bien usando IFNULL() para todos:

Código
  1. VALUES (IFNULL(?, DEFAULT(0)), IFNULL(?, DEFAULT(0)), IFNULL(?, DEFAULT(0)), IFNULL(?, DEFAULT(0)), IFNULL(?, DEFAULT(0)))

No se cual usar :P
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Evaluar Variable cuando esta vacia
Java
^Tifa^ 8 10,721 Último mensaje 4 Diciembre 2008, 19:57 pm
por ^Tifa^
Php & mysql: se conecta a La BD, pero no Inserta datos [solucionado] « 1 2 3 »
PHP
~V 20 11,703 Último mensaje 6 Diciembre 2009, 02:50 am
por ~V
Q hacen cuando estan aburridos y no tienen NADA q hacer??? « 1 2 »
Foro Libre
Haker304 16 6,891 Último mensaje 5 Noviembre 2010, 05:06 am
por APOKLIPTICO
[Solucionado]Configurar el Vuze por defecto?
GNU/Linux
Squirtle 1 5,960 Último mensaje 27 Agosto 2012, 19:51 pm
por Squirtle
Duda con usuarios por defecto en MySQL
Bases de Datos
redee 1 3,701 Último mensaje 19 Febrero 2014, 21:25 pm
por Carloswaldo
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines