2010-05-26 9 views

Respuesta

14

MySQL está volviendo literalmente 0x00 y 0x01 para los campos de bits. Vas a tener que convertirlos en algo apropiado, ya sea PHP del lado

$bitvalue = ($bitvalue == 0x01) ? 'TRUE' : 'FALSE' 

o en la consulta:

SELECT CAST(bitfield AS unsigned int) 
FROM ... 

el que lo convertirá en un int y regresar como '0' y '1' (0x48 y 0x49).

De manera adicional, algunas de las bibliotecas más antiguas de MySQL son anteriores a la compatibilidad con los campos de bits reales en MySQL (cuando se convirtieron silenciosamente en char (1)) y arruinarán los valores, por lo que si tiene problemas con una de esas versiones de dinosaurios, puede que tenga que usar la versión de consulta en lugar de la conversión de PHP.

+1

También puede hacer 'SELECT bitfield + 0' para convertir a int. ¿Hay alguna diferencia al hacerlo de esa manera o usando 'CAST()'? – Mike

+1

Para ser binario-seguro también se puede usar '$ bitvalue = ($ bitvalue === chr (0x01))' que asignará ya sea 'true' o' false' a '$ bitvalue'. –

+0

@StanimirStoyanov el tuyo funcionó para mí –

6

También puede utilizar: ord($bitvalue).

+1

Gracias por su contribución, pero creo que esto debería ser un comentario sobre la respuesta de Marc B. Esta respuesta no está sola. – Day

+0

Esto no proporciona una respuesta a la pregunta. Para criticar o solicitar aclaraciones de un autor, deje un comentario debajo de su publicación; siempre puede comentar sus propias publicaciones, y una vez que tenga suficiente [reputación] (http://stackoverflow.com/faq#reputation) podrá para [comentar cualquier publicación] (http://stackoverflow.com/privileges/comment). – Day

+0

@Day parece una buena respuesta para mí. – Mike

Cuestiones relacionadas