परिणाम सेट्स (Result Sets)
SELECT क्वेरी हमेशा एक रिज़ल्ट सेट ऑब्जेक्ट लौटाती है, जिसमें शून्य या अधिक रिकॉर्ड हो सकते हैं। इस रिज़ल्ट सेट से डेटा प्राप्त करने के कई तरीके हैं, जो आपके उपयोग के मामले पर निर्भर करते हैं। यदि आप फ़ेच मोड नहीं बदलते, तो रिकॉर्ड्स डिफ़ॉल्ट रूप से ऑब्जेक्ट्स के रूप में प्राप्त किए जाते हैं (देखें: setFetchMode)।
सबसे सामान्य मामला foreach() लूप का उपयोग करके रिज़ल्ट सेट को इटरेट करना है।
// स्थिर क्वेरी:
$result = $connection->query("SELECT field1, field2 FROM {mytable}");
foreach ($result as $record) {
// प्रत्येक $record के साथ कुछ करें
}
// डायनामिक क्वेरी
$result = $query->execute();
foreach ($result as $record) {
// प्रत्येक $record के साथ कुछ करें।
}
हालाँकि, परिणामों के उद्देश्य पर निर्भर करते हुए, रिकॉर्ड्स प्राप्त करने के कई अन्य तरीके भी हैं।
अगला रिकॉर्ड स्पष्ट रूप से प्राप्त करने के लिए उपयोग करें:
$record = $result->fetch(); // डिफ़ॉल्ट फ़ेच मोड का उपयोग करें। $record = $result->fetchObject(); // stdClass ऑब्जेक्ट के रूप में फ़ेच करें। $record = $result->fetchAssoc(); // एसोसिएटिव ऐरे के रूप में फ़ेच करें।
यदि अगला रिकॉर्ड मौजूद नहीं है, तो FALSE लौटाया जाता है। आमतौर पर fetch() की बजाय fetchObject() और fetchAssoc() का उपयोग करना बेहतर होता है, क्योंकि ये अधिक स्व-वर्णनात्मक हैं। यदि आपको PDO द्वारा समर्थित किसी अन्य फ़ेच मोड का उपयोग करने की आवश्यकता है, तो fetch() का उपयोग करें।
सिर्फ एक फ़ील्ड प्राप्त करने के लिए उपयोग करें:
$record = $result->fetchField($column_index);
$column_index का डिफ़ॉल्ट मान 0 है (पहला कॉलम)।
DELETE, INSERT या UPDATE क्वेरी द्वारा प्रभावित पंक्तियों की संख्या गिनने के लिए:
$number_of_rows = $result->rowCount();
SELECT क्वेरी द्वारा लौटाई गई पंक्तियों की संख्या गिनने के लिए:
$number_of_rows = $connection->select('mytable')->countQuery()->execute()->fetchField();
सभी रिकॉर्ड्स को एक बार में एक ऐरे में प्राप्त करने के लिए इनमें से एक का उपयोग करें:
// सभी रिकॉर्ड्स को stdClass ऑब्जेक्ट्स के इंडेक्स्ड ऐरे में प्राप्त करें। $result->fetchAll(); // परिणाम के किसी विशेष फ़ील्ड द्वारा की किए गए एसोसिएटिव ऐरे में सभी रिकॉर्ड्स प्राप्त करें। $result->fetchAllAssoc($field); // 2-कॉलम रिज़ल्ट सेट को field 0 => field 1 के एसोसिएटिव ऐरे के रूप में प्राप्त करें। $result->fetchAllKeyed(); // दो फ़ील्ड्स को चुनने के लिए कॉलम इंडेक्स निर्दिष्ट कर सकते हैं। $result->fetchAllKeyed(0,2); // field 0 => field 2 $result->fetchAllKeyed(1,0); // field 1 => field 0 // यदि आपको ऐसा ऐरे चाहिए जिसमें keys और values दोनों एक ही फील्ड हों (जैसे 'checkboxes' फॉर्म एलिमेंट के लिए), तो: $result->fetchAllKeyed(0,0); // field 0 => field 0, जैसे [article] => [article] // 1-कॉलम रिज़ल्ट सेट को एकल ऐरे के रूप में प्राप्त करें। $result->fetchCol(); // कॉलम नंबर निर्दिष्ट कर सकते हैं, अन्यथा डिफ़ॉल्ट पहला कॉलम होता है। $result->fetchCol($column_index);
ध्यान दें कि fetchAll() और fetchAllAssoc() डिफ़ॉल्ट रूप से उसी फ़ेच मोड का उपयोग करेंगे जो क्वेरी में सेट किया गया है (न्यूमेरिक ऐरे, एसोसिएटिव ऐरे या ऑब्जेक्ट)। इसे बदलने के लिए आप नया फ़ेच मोड पास कर सकते हैं। fetchAll() के लिए यह पहला पैरामीटर है, और fetchAllAssoc() के लिए यह दूसरा पैरामीटर है। उदाहरण:
// 'id' फ़ील्ड पर की किए गए ऐरे का ऐरे प्राप्त करें।
$result->fetchAllAssoc('id', PDO::FETCH_ASSOC);
// न्यूमेरिक और एसोसिएटिव दोनों कीज़ वाले ऐरे का ऐरे प्राप्त करें।
$result->fetchAll(PDO::FETCH_BOTH);
चूँकि PHP लौटाए गए ऑब्जेक्ट्स पर मेथड चेनिंग सपोर्ट करता है, इसलिए अक्सर $result वेरिएबल को पूरी तरह छोड़ दिया जाता है, जैसे:
// ids से titles का एसोसिएटिव ऐरे प्राप्त करें।
$examples = $connection->query("SELECT id, title FROM {mytable}")->fetchAllKeyed();
// डेटाबेस से एक ही रिकॉर्ड प्राप्त करें।
$myobj = $connection->query("SELECT * FROM {mytable} WHERE example = :example", [':example' => $example])->fetchObject();
// डेटाबेस से एक ही वैल्यू प्राप्त करें।
$myval = $connection->query("SELECT example FROM {mytable} WHERE id = :id", [':id' => $id])->fetchField();
यदि आपको [1, 2, 3, 4, 5] जैसा साधारण ऐरे चाहिए, तो आपको [1=>1, 2=>2, 3=>3, 4=>4, 5=>5] जैसा कुछ मिलेगा। आप इसे इस प्रकार प्राप्त कर सकते हैं:
$ids = $connection->query("SELECT id FROM {example}")->fetchAllKeyed(0,0);