मुझे db_query () का उपयोग करके केवल एक परिणाम कैसे मिलेगा


28

मैं 'पुराने स्कूल' PHP MySQL उपयोग करने के तरीकों mysql_fetch_array()आदि से संक्रमण कर रहा हूं और मैं अपने मॉड्यूल में डेटाबेस एपीआई का उपयोग करके अधिक Drupally बनने की कोशिश कर रहा हूं।

मैं बस वापस आना चाहता हूं और एक मूल्य का प्रिंट आउट लेना चाहता हूं। उदाहरण के लिए:

$query = db_query("SELECT zip FROM {zipcodes} WHERE city = :city LIMIT 1", array(":city" => $city));

मुझे पता है कि मूल्य वहां है, मैं डेटाबेस एपीआई के बाहर पारंपरिक तरीकों का उपयोग करके इसे एक्सेस और प्रिंट कर सकता हूं।

print $query->zip काम नहीं कर रहा।

एपीआई प्रलेखन कीचड़ के रूप में स्पष्ट है।

क्या कोई मुझे इन मूल्यों तक पहुंचने का सही तरीका बता सकता है?

वहाँ एक अच्छा ट्यूटोरियल किसी को भी सिफारिश कर सकता है?

जवाबों:


38

आप इस्तेमाल कर सकते हैं आप केवल एक परिणाम लाने के लिए चाहते हैं, तो fetchField साथ db_queryपरिणाम, जैसे लाने के लिए:

$zip_code = db_query("SELECT zip from {zipcodes} WHERE city = :city LIMIT 1", array(":city" => $city))->fetchField();

तुम भी तरह विकल्पों का उपयोग कर मूल्यों क्वेरी के लिए लौट आए परिणाम स्रोत से लिया गया लाने सकता है () fetchObject (पारंपरिक पीएचपी के तरीकों के लिए इसी तरह mysql_fetch_object) का उपयोग कर की तरह कोडिंग और परिणाम प्राप्त।



आपके द्वारा वर्णित कार्यों या विधियों में से कोई भी Drupal 7 में उपलब्ध नहीं है। आपका उदाहरण एक घातक त्रुटि उत्पन्न करेगा। इसके अलावा, आप Drupal 6 और Drupal 7 कोड मिश्रण हो रहे हैं, इसलिए नीचे वोट
क्लाइव

2
@ क्लॉप उफ़ .... ब्लड रश ... कारण जानने के लिए अच्छा है..थैंक!
optimusprime619

1
कोई चिंता नहीं, अगर आप इस सवाल का जवाब तक ठीक मैं खुशी downvote हटा देंगे
क्लाइव

1
@Clive ने अभी किया ... :)
optimusprime619

15

यहाँ एक MySQL क्वेरी लिखने के बिना Drupal 7 में डेटाबेस एपीआई का उपयोग कैसे करें:

$query = db_select('zipcodes', 'z')
  ->fields('z', array('zip'))
  ->condition('z.city', $city)
  ->range(0, 1)
  ->execute();
$result = $query->fetchObject();
print $result->zip;

9

आपको अपनी $ क्वेरी को लूप करना होगा, आप यह नहीं मान सकते कि आपके पास केवल ऊपर दिए गए क्वेरी के साथ एक परिणाम है।

foreach ($query as $row) {
  print $row->zip;
}

यदि आप जानते हैं कि आपके पास केवल एक ही परिणाम है, तो आप अपने क्वेरी -> पर fetchObject को कॉल कर सकते हैं

$query = db_query("select zip from {zipcodes} where city = :city limit 1", array(":city" => $city))->fetchObject();

$ क्वेरी प्रिंट करें-> ज़िप तब आपको वह देना चाहिए जो आप चाहते हैं।


4
नोट: एक सीमा के हार्डकोडिंग के बजाय, आपको db_query_range () का उपयोग करना चाहिए।
बरदिर

3

मुझे क्या करना होगा

$row = (object)db_query('Your SQL here')->fetchAssoc();

यदि आप परिणाम सेट से ठीक एक पंक्ति चाहते हैं। अन्यथा फोरच के साथ लूपिंग सबसे अच्छा विकल्प है, जैसा कि पहले सुझाव दिया गया था।


2

मुझे पता है कि यह पुराना है, लेकिन आपको यह करना चाहिए:

$zip_code = db_select('zipcodes', 'z')
    ->fields('z', array(
        'zip'
    ))
    ->condition('city', $city)
    ->range(0, 1)
    ->execute()
    ->fetchField();

0

वैसे आपको द्रुप 7 में इसे ठीक से करने के तरीके हैं:

  1. db_select - Drupal में एक फ़ंक्शन होता है जो एक ऑब्जेक्ट लौटाता है जिसे आप SQL क्वेरी के साथ बनाते हैं - https://api.drupal.org/api/drupal/includes%21database%21database.incff/db_select/7 । आपके पास रेंज नामक ऑब्जेक्ट पर एक विधि है। आप इसका उपयोग कर सकते हैं।

  2. इकाई फ़ील्ड क्वेरी, जो एक वर्ग है जो एंट्री पर SQL क्वेरी का निर्माण करती है: https://www.drupal.org/node/1343708 । यह भी रेंज विधि है।


0

द्रुपाल al

एकल परिणाम के लिए इस क्वेरी का उपयोग करें:

$zip_code = db_query("SELECT zip from {zipcodes} WHERE city = :city", array(":city" => $city))->fetchField();

इसके बजाय इसका उपयोग करें

$zip_code = db_query("SELECT zip from {zipcodes} WHERE city = :city LIMIT 1", array(":city" => $city))->fetchField();

क्योंकि इसकी चेतावनी है।


-2

द्रुपाल ६

$query आपका परिणाम होगा आपको इससे मान प्राप्त करने की आवश्यकता है, आपके मामले में यदि यह सीधे प्राप्त करने के लिए केवल 1 पंक्ति और 1 कॉलम अर्थात ज़िप प्राप्त करता है

$zip = db_result(db_query("YOUR SQL QUERY"));

$query->zipकाम नहीं करेगा क्योंकि $ क्वेरी परिणामित होती है न कि भरी हुई वस्तु या सरणी। तो यह करना चाहिए

while($row = db_fetch_object($res)){
  $row->zip ; // etc
}

नोट: सरणी प्रारूप में मूल्यों को लाने के लिए db_fetch_arrayएक और एपीआई है


1
db_result db_fetch_array और db_fetch_object ड्रुपल 6 और पहले के लिए हैं।
जेनमल्टन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.