2010-05-26 11 views
8

लौट रहा mysql_fetch_assoc($query), बिट क्षेत्र से बाहर देता है, जो माना जाता है कि सच किया जा रहा है में से एक का उपयोग कर रहा पढ़ने mysql सा क्षेत्र।
समस्या कि मैं भी इस एक्सएमएल के लिए उत्पादन की जरूरत है और यह एक अवैध एक्सएमएल चरित्र है। डीबी तालिका के लिए वर्णसेट utf-8 है। ऐसा क्यों होता है?php अजीब चरित्र

उत्तर

14

MySQL सचमुच बिट क्षेत्रों के लिए 0x00 और 0x01 लौटा रहा है।

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

जो किसी पूर्णांक पर यह बदलने और '0' और '1' के रूप में वापस आ जाएगी: आप उन्हें कुछ उचित या तो पीएचपी साइड

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

में या क्वेरी में कन्वर्ट करने के लिए होगा (0x48 और 0x49)।

बस एक तरफ के रूप में, कुछ पुराने mysql पुस्तकालयों में MySQL में वास्तविक बिट फ़ील्ड के लिए प्री-डेट समर्थन (जब वे चुपचाप चार (1) में परिवर्तित हो जाते थे) और मानों को मिटा देंगे, इसलिए यदि आप अटक गए हैं उन डायनासोर संस्करणों में से एक, आपको PHP-side रूपांतरण की बजाय क्वेरी संस्करण का उपयोग करना पड़ सकता है।

+1

तुम भी 'पूर्णांक को कास्ट करने के लिए चयन कर सकते हैं bitfield + 0'। क्या इस तरह से कोई रास्ता या 'CAST() 'का उपयोग कर कोई अंतर है? – Mike

+1

होना करने के लिए द्विआधारी-सुरक्षित एक भी '$ bitvalue = उपयोग कर सकते हैं ($ bitvalue === chr (0x01))' जो '$ bitvalue' के लिए या तो' TRUE' या 'FALSE' आवंटित करेगा। –

+0

@StanimirStoyanov आपने मेरे लिए काम किया –

6

तुम भी उपयोग कर सकते हैं: ord($bitvalue)

+1

आपके योगदान के लिए धन्यवाद, लेकिन मुझे लगता है कि यह मार्क बी के उत्तर पर एक टिप्पणी होनी चाहिए - यह उत्तर अकेले नहीं खड़ा है। – Day

+0

यह प्रश्न का उत्तर नहीं प्रदान करता है। किसी लेखक से स्पष्टीकरण की आलोचना करने या अनुरोध करने के लिए, अपनी पोस्ट के नीचे एक टिप्पणी छोड़ दें - आप हमेशा अपनी पोस्ट पर टिप्पणी कर सकते हैं, और एक बार आपके पास पर्याप्त [प्रतिष्ठा] (http://stackoverflow.com/faq#reputation) हो जाने पर आप सक्षम होंगे [किसी भी पोस्ट पर टिप्पणी] (http://stackoverflow.com/privileges/comment)। – Day

+0

@ डे यह मेरे लिए एक अच्छा पर्याप्त जवाब की तरह लगता है। – Mike

संबंधित मुद्दे