2010-07-16 15 views
5
$GetUid = $dbConnect->prepare("SELECT UID FROM users WHERE username = :username"); 
$GetUid->execute($RegisterData3); 
$UserID = $GetUid->fetch(); 

यह सरणी को स्ट्रिंग क्यों नहीं देता है?PHP पीडीओ fetch एक सरणी देता है?

var_dump ('$ UserID') का कहना है

array 
    'UID' => string '45' (length=2) 
    0 => string '45' (length=2) 

यह होना चाहिए

array 
    'UID' => string '45' (length=2) 

अद्यतन * किस बारे में 0? यह कहाँ से आया है? उत्तरों के लिए धन्यवाद।

उत्तर

13

आपने fetch_style पैरामीटर निर्दिष्ट नहीं किया है। यह डिफ़ॉल्ट रूप से FETCH_BOTH देता है, जो एक सरणी है। यहां विकल्प हैं और इसे कैसे निर्दिष्ट करें: http://php.net/manual/en/pdostatement.fetch.php

संपादित करें: साथ ही, यह हमेशा एक सरणी लौटाएगा, भले ही केवल एक कॉलम हो, क्योंकि पंक्ति में कई गुण हो सकते हैं। आप FETCH_ASSOC का उपयोग कर सकते हैं और फिर डेटा प्राप्त करने के लिए अपना कॉलम नाम निर्दिष्ट कर सकते हैं, या यदि आप केवल fetch() का उपयोग करते हैं, तो एरे को कॉलम नाम और 0-अनुक्रमित कॉलम नंबर दोनों द्वारा अनुक्रमित किया जाता है।

+0

0 चीज़ के बारे में क्या है? यह कहाँ से आया है। एक बार फिर धन्यवाद। –

+0

ओoooooo मैं देखता हूँ। धन्यवाद 2 नौसिखिया प्रश्न के लिए soryy: डी –

+1

उपयोगकर्ताओं से चयन यूआईडी के बजाय उपयोगकर्ताओं से चुनें * को छोड़कर, फिर से अपनी क्वेरी करने का प्रयास करें। नतीजा (कहें कि आपके टेबल में दो कॉलम हैं) इस तरह कुछ होना चाहिए: सरणी 'यूआईडी' => स्ट्रिंग '45' (लंबाई = 2) 0 => स्ट्रिंग '45' (लंबाई = 2) अन्य डेटा 1 => स्ट्रिंग '12' (लंबाई = 3) 1 => स्ट्रिंग '12' (लंबाई = 3) जहां तीसरी और चौथी रेखाएं दूसरी कॉलम हैं (नाम और मान सिर्फ मेरे द्वारा बनाए गए हैं) और वहां कोई नहीं होगा StackOverflow अगर यह नौसिखिया प्रश्नों के लिए नहीं थे;) – rownage

2

यदि आप केवल कॉलम प्राप्त करना चाहते हैं, तो आपको PDOStatement की fetchColumn() विधि की आवश्यकता है।

2

परिणामसेट लाइन द्वारा लाइन लाया जाता है, भले ही लाइन में एक कॉलम

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