2012-09-30 238 views
10

Actualmente estoy usando Tinyint(1) para indicar Boolean valores en mis bases de datos MySQL, lo que realmente no me gusta. Entonces, ¿cómo podría almacenar y recuperar valores de Boolean en mis bases de datos MySQL a través del PHP?Para tratar con valores 'booleanos' en PHP y MySQL

¿Cómo usarlo en la cláusula WHERE y cómo asignar el valor en las consultas INSERT, UPDATE correctamente?

Cuando tengo de nuevo en PHP, es TRUE, true, o simplemente 1, si voy a comprobar que con ===?

¿Alguna vez ha tenido algún problema al migrar de Tinyint(1) a BOOLEAN?

Gracias de antemano. :)

Actualización:

Sé que Tinyint(1) es lo mismo que Boolean, sin embargo yo quiero trabajar en Boolean tipo de datos en lugar de Tinyint(1). Es por eso que estoy haciendo la pregunta.

+7

'BOOL, boolean' sólo son sinónimos ** ** para' TINYINT (1) 'en MySQL. –

+0

gracias, sí, lo sé, pero quiero trabajar en 'Boolean' en mi lado de PHP, en lugar de' Tinyint', por eso estoy haciendo la pregunta ... – Mahdi

+0

Aunque depende de su metodología, es posible que necesite para convertir las palabras clave 'true'' false' en 'int' cuando se inserta en cualquier tipo int.Creo que algunas formas de declaraciones preparadas hacen este arreglo por usted, pero si su consulta está en línea, entonces esto es necesario. –

Respuesta

15

MySQL no tiene un tipo de datos booleanos. Tinyint (1) está bastante cerca. Trabajar con esto en PHP es simple.

If (1) echo 'true'; // is the same as if (true) 
// Just as 
if (0) echo 'false'; // is the same as if (false) 

Y si realmente desea un valor booleano, puede hacerlo

// $mysql_data is tinyint value from db 
$boolean = $mysql_data ? true : false; 
// Now you have your boolean as $boolean 
+0

gracias hombre, ahora estoy más buscando valores BIT BTW :) – Mahdi

+0

En MySQL, los valores VERDADERO y FALSO son meramente alias para 1 y 0 como se explica [en documentos de mysql] (https: //dev.mysql. com/doc/refman/5.7/es/numérico-tipo-descripción.html) – mikewasmike

4

Con booleanos, no use === FALSE - el valor ya es booleano (a menos que la función requiera el uso de ===, como strpos()). El valor es booleanish: técnicamente es un número entero, pero PHP es un lenguaje dinámico, por lo que no es un problema.

Considera la función preg_match() - devuelve el número de coincidencias (entero).

¿Prefiere escribir eso?

if (preg_match('/\bregexp?\b/', $variable) === 1) 

O eso?

if (preg_match('/\bregexp?\b/', $variable)) 

Obviamente, la forma explícita y sin === 1 es mejor. Usted pregunta si coincide, no si tiene 0 coincidencias. Además, si cree que === 1 es más seguro, ¿por qué no hacer === 1 === TRUE?

Por supuesto, es posible convertir valores en booleanos usando (bool) o !!.

Además, en ciertos lenguajes como C o Perl, no hay diferencia entre booleanos y números. Simplemente funciona.

+0

hey, gracias! ¡fue realmente interesante para mí! :) – Mahdi

Cuestiones relacionadas