2011-06-09 3 views
11

Drupal में, मैं एक एसक्यूएल इस प्रकार निष्पादित कर सकते हैं:Drupal db_query के PHP सरणी के परिणाम को परिवर्तित करना संभव है?

:

$query_object = db_query("SELECT * FROM {nodes}"); 

तो मैं जानता हूँ कि क्वेरी केवल एक ही परिणाम देता है (ताकि केवल 1 पंक्ति और 1 स्तंभ), मैं सीधे इसके साथ प्राप्त कर सके

$rows[] = array(); 
while (($row = db_fetch_object($query_object) != FALSE) { 
    $rows[] = $row; 
} 

अगर वहाँ ऐसा करने के लिए एक आसान तरीका है मैं सोच रहा हूँ:

$result = db_result($query_object); 

अगर मैं एक से अधिक परिणाम मिल गया है, मैं उन्हें लूप करने के लिए की तरह कुछ के साथ की जरूरत है? क्या कोई तरीका है कि मैं एक ही कथन के साथ सभी परिणामों को सरणी में स्थानांतरित कर सकता हूं? या यह काम नहीं कर रहा है, क्योंकि db_result एक कर्सर जैसी वस्तु देता है, जहां आप हर बार केवल एक पंक्ति प्राप्त कर सकते हैं?

+2

कभी कि Drupal में क्या आपके चाहता है किसी भी समारोह में देखा है, लेकिन यह बहुत आसान एक आवरण समारोह है कि जब तक करता बनाने के लिए() आपके लिए लूप। –

+0

मैं बस सोच रहा हूं कि कोई अन्य ड्रूपल डेटाबेस एपीआई है, जो कर्सर आधारित नहीं है। लेकिन ऐसा लगता है कि यह अस्तित्व में नहीं है। – Sebi

+0

[db_result()] (http://api.drupal.org/api/drupal/includes--database.mysql.inc/function/db_result/6) क्वेरी का उपयोग तब नहीं किया जाता जब क्वेरी एक पंक्ति लौटाती है, लेकिन जब क्वेरी सिर्फ एक फ़ील्ड का चयन करता है। आपके उदाहरण में, मैं उस फ़ंक्शन का उपयोग 'चयन * से {नोड्स} ...' के साथ नहीं करूँगा, लेकिन 'nodes} से 'चयन करें' के साथ ...'। – kiamlaluno

उत्तर

26

नहीं Drupal 6.

Drupal 7 में में, वहाँ तरीके कि तरह छोरों से बचने के लिए मदद कर सकते हैं लाने के कर रहे हैं। http://drupal.org/node/310072 से:

<?php 
// Retrieve all records into an indexed array of stdClass objects. 
$result->fetchAll(); 

// Retrieve all records into an associative array keyed by the field in the result specified. 
$result->fetchAllAssoc($field); 

// Retrieve a 2-column result set as an associative array of field 1 => field 2. 
$result->fetchAllKeyed(); 
// You can also specify which two fields to use by specifying the column numbers for each field 
$result->fetchAllKeyed(0,2); // would be field 0 => field 2 
$result->fetchAllKeyed(1,0); // would be field 1 => field 0 

// Retrieve a 1-column result set as one single array. 
$result->fetchCol(); 
// Column number can be specified otherwise defaults to first column 
$result->fetchCol($column_index); 
?> 
+0

ऑब्जेक्ट्स की सरणी के बजाय सरणी की सरणी पाने का कोई आसान तरीका नहीं है? – Damon

+1

लिंक किए गए पृष्ठ को देखें, "ध्यान दें कि fetchAll() और fetchAllAssoc() डिफ़ॉल्ट रूप से क्वेरी (numeric array, सहयोगी सरणी, या ऑब्जेक्ट) पर जो भी fetch मोड सेट किया गया था, का उपयोग करके प्राप्त करेगा। इसे एक नए fetch में गुजरकर संशोधित किया जा सकता है मोड स्थिर। fetchAll() के लिए, यह पहला पैरामीटर है। fetchAllAssoc() के लिए, यह दूसरा पैरामीटर है। " – Berdir

17

Drupal 7 में, आप भी उपयोग कर सकते हैं:

db_query('QUERY')->fetchAll(PDO::FETCH_ASSOC); 
+0

धन्यवाद !!!!!!!!! –

-1

एक भी db_fetch_array($result), जहां $result =db_query($queryString) उपयोग कर सकते हैं। Drupal प्रलेखन से समझाया:

[यह रिटर्न] ... एक साहचर्य सरणी परिणाम, या असत्य की अगली पंक्ति का प्रतिनिधित्व। इस ऑब्जेक्ट की कुंजी तालिका फ़ील्ड के नाम क्वेरी द्वारा चुने गए हैं, और मान परिणाम पंक्ति के लिए फ़ील्ड मान हैं।

+1

हां और नहीं, यह केवल परिणाम के परिणामस्वरूप अगले परिणाम को सरणी के रूप में सेट करता है, लेकिन सभी परिणामों को एक बड़ी सरणी में नहीं :-) – Sebi

3

मैं हमेशा कुछ इस तरह (सिर्फ एक सरल उदाहरण) कार्य करें:

$query = db_query("SELECT nid 
     FROM {from} 
     WHERE blallala 
     ", 
    $tab_arg 
    ); 
    if ($query->rowCount() == 0) { 
    $output=t('no result') 
    } else 
    { 
foreach($query as $result) 
{ 
$tab_res[]=$result; 
} 
foreach($tab_res as $res) 
{ 
$output.=$res->nid; 
} 
}