Drupal 7 में डेटाबेस के साथ काम — पाठ 7 — क्वेरी परिणामों की प्रोसेसिंग (fetch)
SELECT क्वेरी हमेशा 0 या उससे अधिक रिकॉर्ड्स लौटाती है। Drupal 7 में इन परिणामों को प्रोसेस (fetch) करने के कई तरीके होते हैं — आप अपनी आवश्यकता के अनुसार कोई भी तरीका चुन सकते हैं।
सबसे सामान्य तरीका है परिणामों को foreach() लूप के माध्यम से संसाधित करना:
<?php $result = db_query("SELECT nid, title FROM {node}"); foreach ($result as $record) { // प्रत्येक $record के साथ कुछ करें $node = node_load($record->nid); } ?>
आप इस बात पर निर्भर करते हुए कि परिणामों के साथ क्या करना है, अन्य तरीके भी अपना सकते हैं। उदाहरण के लिए, अगली रिकॉर्ड को मैन्युअली प्राप्त करने के लिए:
<?php $record = $result->fetch(); // डिफ़ॉल्ट रूप से ऑब्जेक्ट के रूप में प्रोसेस करता है $record = $result->fetchObject(); // ऑब्जेक्ट के रूप में प्रोसेस करता है $record = $result->fetchAssoc(); // एसोसिएटिव ऐरे के रूप में प्रोसेस करता है ?>
जब और रिकॉर्ड्स उपलब्ध नहीं होंगे, तो ये मेथड FALSE लौटाएँगे। बेहतर पठनीयता के लिए fetch() के बजाय fetchObject() या fetchAssoc() का उपयोग करना अधिक स्पष्ट होता है।
यदि आपको केवल एक कॉलम का मान प्राप्त करना है, तो:
<?php $record = $result->fetchField($column_index); ?>
$column_index का डिफ़ॉल्ट मान 0 होता है (यानी पहला कॉलम)।
यदि आप जानना चाहते हैं कि कुल कितनी पंक्तियाँ लौटी हैं, तो:
<?php $number_of_rows = $result->rowCount(); ?>
यदि आप सभी रिकॉर्ड्स को एक साथ एक ऐरे में बदलना चाहते हैं, तो:
<?php // सभी रिकॉर्ड्स को ऑब्जेक्ट्स के एसोसिएटिव ऐरे के रूप में लौटाता है $result->fetchAll(); // किसी विशेष फ़ील्ड को कुंजी के रूप में और बाकी डेटा को मान के रूप में लौटाता है $result->fetchAllAssoc($field); // पहले और दूसरे कॉलम को कुंजी => मान के रूप में लौटाता है $result->fetchAllKeyed(); $result->fetchAllKeyed(0,2); // ऐरे होगा [Field0 => Field2] $result->fetchAllKeyed(1,0); // ऐरे होगा [Field1 => Field0] // केवल एक कॉलम की सभी प्रविष्टियाँ एक सामान्य ऐरे में लौटाता है $result->fetchCol(); // यदि कॉलम निर्दिष्ट किया गया है, तो उसी कॉलम के मान लौटाएगा $result->fetchCol($column_index); ?>
ध्यान दें कि fetchAll() और fetchAllAssoc() डिफ़ॉल्ट रूप से fetch मोड का पालन करते हैं, लेकिन आप इन्हें नया fetch मोड पास करके बदल सकते हैं। fetchAll() के लिए यह पहला पैरामीटर होगा, और fetchAllAssoc() के लिए दूसरा।
चूंकि PHP में ऑब्जेक्ट्स पर मेथड चेनिंग समर्थित है, आप मध्यवर्ती वेरिएबल $result को छोड़ सकते हैं और क्वेरी के परिणामों को सीधे प्रोसेस कर सकते हैं:
<?php // nid और title को एक एसोसिएटिव ऐरे के रूप में प्राप्त करें $nodes = db_query("SELECT nid, title FROM {node}")->fetchAllKeyed(); // एकल रिकॉर्ड को ऑब्जेक्ट के रूप में प्राप्त करें $node = db_query("SELECT * FROM {node} WHERE nid = :nid", array(':nid' => $nid))->fetchObject(); // केवल एक फ़ील्ड (title) का मान प्राप्त करें $title = db_query("SELECT title FROM {node} WHERE nid = :nid", array(':nid' => $nid))->fetchField(); ?>