2012-12-26 13 views
8

के साथ पंक्ति कैसे प्राप्त करें मैं निराश होने की कोशिश नहीं कर रहा हूं, लेकिन मैंने हाल ही में सीखा है कि mysql_* PHP में कमी आई है। मैंने फैसला किया है कि मैं सीखूंगा कि पीडीओ का उपयोग कैसे करें। मैं इसे आज दोपहर देख रहा हूं, और इसका उपयोग कर डेटाबेस से कनेक्ट करना आसान था, लेकिन फिर मैं इसके साथ एक पंक्ति लाना चाहता था और पंक्ति को स्तंभ नामों द्वारा अनुक्रमित सरणी के रूप में सहेजना चाहता था (उसी तरह कार्य के समान mysql_fetch_array किया)। मैं अपने जीवन को बचाने के लिए इसे समझ नहीं सकता। मैं स्पष्ट करने के लिए अपना कोड पोस्ट करूंगा, और मुझे यकीन है कि यह कुछ आसान है (सभी प्रोग्रामिंग त्रुटियां हमेशा सरल होती हैं) लेकिन मैं निश्चित रूप से कुछ गलत कर रहा हूं।पीडीओ

//CONNECT TO DATABASE 
$host = $_PARAM["DatabaseServer"]; 
$db  = $_PARAM["MainDatabase"]; 
$dbuser = $_PARAM["DatabaseUser"]; 
$dbpass = $_PARAM["DatabasePass"]; 
try 
{ 
    $Database = new PDO("mysql:host=$host;dbname=$db", $dbuser, $dbpass); 
} 
catch (PDOException $e) 
{ 
    echo "There was an unexpected error. Please try again, or contact us with concerns"; 
} 

$stmt = $Database->prepare("SELECT * FROM users WHERE username=?"); 
$stmt->execute(array($sUserCook)); 
$row = $stmt->fetchAll(PDO::FETCH_ASSOC); 

echo $row["username"]; 

सहायता के लिए धन्यवाद।

एलेक्स

+6

क्या आप यहां सिंटैक्स को हाइलाइट कर सकते हैं? क्या आपको एक त्रुटि संदेश मिला? यदि नहीं, तो क्या आपने error_reporting को सक्षम किया? – mario

+2

'तैयार() 'लाइन में कुछ गायब उद्धरण हैं, लेकिन आप शायद उसे जानते थे। –

+2

प्रोग्रामिंग निराशाजनक है जब आपको मार्गदर्शन करने में सहायता के लिए आपको त्रुटि संदेश नहीं मिलते हैं। आपको त्रुटियों को दिखाने के लिए आपको PHP को कॉन्फ़िगर करने की आवश्यकता है। – goat

उत्तर

19

fetchAll करता है कि वह क्या कहते हैं: यह एक प्रश्न के लिए सभी परिणाम को हासिल करेगा। चूंकि यह बहुत सारे परिणाम प्राप्त करता है, इसलिए आपको एक अनुक्रमित सरणी मिल जाएगी।

fetch यदि आप केवल एक पंक्ति चाहते हैं तो आप क्या खोज रहे हैं: यह एक प्रश्न के लिए एक परिणाम प्राप्त करता है। यदि आप mysql_* कोड पीडीओ में परिवर्तित कर रहे हैं, तो सबसे तेज़ तरीका केवल mysql_fetch_assoc के बजाय इस विधि का उपयोग करना होगा।

आप अभी भी fetchAll के साथ जा रहा है, तो कर रहे हैं: अपने कोड शायद सिर्फ इस तरह दिखेगा:

$rows = $stmt->fetchAll(PDO::FETCH_ASSOC); 
foreach ($rows as $row) { 
    echo $row['username']; 
} 

जैसा कि मैंने कहा, अगर आप सिर्फ पीडीओ कोड को विरासत कोड परिवर्तित कर रहे हैं, यह करने के लिए आसान हो सकता है बस तैयार बयान करने के लिए सभी तरह की पूछताछ बदल सकते हैं और निम्नलिखित बदल देते हैं:

  • mysql_fetch_assoc($result)
    ->$stmt->fetch(PDO::FETCH_ASSOC)
  • mysql_num_rows($result)
    ->$stmt->rowCount()
  • while ($row = mysql_fetch_assoc($result)) {}
    ->foreach ($stmt->fetchAll(PDO::FETCH_ASSOC) as $row) {}
+0

यह समझ में आता है, मैं आपकी त्वरित प्रतिक्रिया की सराहना करता हूं और मैं आपकी सलाह का उपयोग करूंगा। मैंने कोड बदल दिया और यह मुझे त्रुटि नहीं दे रहा घातक त्रुटि: लाइन पर \ xxxx.php में अपरिभाषित विधि डेटाबेस :: तैयार() पर कॉल करें। यह मुझे क्यों बता रहा है कि यह अनिर्धारित है? धन्यवाद – Alex

+0

मुझे लगता है कि आपका "डेटाबेस" वर्ग पीडीओ ऑब्जेक्ट नहीं है, यही कारण है कि आप इसे तैयार नहीं कर सकते हैं। –

0

उपयोग

$row = $stmt->fetch(PDO::FETCH_ASSOC); 

आप पहली बार क्वेरी परिणाम मिल जाएगा।