2010-05-26 11 views
8

Sto usando mysql_fetch_assoc($query), uno dei bit field restituiti, che è presumibilmente vero.
Il problema è che ho anche bisogno di trasmettere questo a xml ed è un carattere xml illegale. il set di caratteri per la tabella db è utf-8. perché succede?php reading mysql bit field return carattere strano

risposta

14

MySQL è letteralmente tornando 0x00 e 0x01 per i campi di bit. Dovrete convertirli in qualcosa di appropriato sia PHP-side

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

o nella query:

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

che verrà convertito in un int e ritorno, '0' e '1' (0x48 e 0x49).

Proprio come una parte, alcune delle vecchie librerie mysql pre-data il supporto per i campi bit reali in MySQL (quando sono state silenziosamente convertite in char (1)) e cancellano i valori, quindi se sei bloccato una di quelle versioni di dinosauri, potrebbe essere necessario utilizzare la versione della query piuttosto che la conversione sul lato PHP.

+1

È anche possibile eseguire 'SELEZIONA bitfield + 0' per eseguire il cast su int. C'è qualche differenza nel farlo in questo modo o usare 'CAST()'? – Mike

+1

Per essere sicuri di binari si può anche usare '$ bitvalue = ($ bitvalue === chr (0x01))' che assegnerà 'true' o 'false' a' $ bitvalue'. –

+0

@StanimirStoyanov il tuo ha funzionato per me –

6

È inoltre possibile utilizzare: ord($bitvalue).

+1

Grazie per il tuo contributo, ma penso che questo dovrebbe essere un commento alla risposta di Marc B - questa risposta non è la sola. – Day

+0

Questo non fornisce una risposta alla domanda. Per criticare o richiedere chiarimenti da un autore, lascia un commento sotto il loro post - puoi sempre commentare i tuoi post, e una volta che hai sufficiente [reputazione] (http://stackoverflow.com/faq#reputation) sarai in grado [commentare qualsiasi post] (http://stackoverflow.com/privileges/comment). – Day

+0

@Day mi sembra una risposta abbastanza buona. – Mike