Աշխատանք տվյալների բազայի հետ Drupal 7-ում - Դաս 7 - Հարցման արդյունքների մշակում (fetch)
Ընտրության հարցումը միշտ վերադարձնում է հարցման մշակման արդյունքը՝ 0 կամ ավել գրառում։ Կան մի քանի եղանակներ արդյունքը մշակելու համար, որոնք կարող եք օգտագործել ըստ անհրաժեշտության։
Ամենահաճախ օգտագործվող մեթոդը 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
։ Խորհուրդ է տրվում օգտագործել fetchObject()
կամ fetchAssoc()
, քանի որ դրանք ավելի հստակ են։ Եթե ցանկանում եք միայն մեկ դաշտի արժեքը վերցնել՝ օգտագործեք՝
<?php $record = $result->fetchField($column_index); ?>
Որտեղ $column_index
-ը լռելյայն 0-ն է։ Եթե ցանկանում եք ստանալ արդյունքների քանակը՝ օգտագործեք՝
<?php $number_of_rows = $result->rowCount(); ?>
Ամբողջ արդյունքը մեկ զանգվածում ստանալու համար՝
<?php // Վերադարձնում է արդյունքը որպես օբյեկտների ասոցիատիվ զանգված $result->fetchAll(); // Վերադարձնում է ասոցիատիվ զանգված՝ ըստ ընտրված դաշտի $result->fetchAllAssoc($field); // Վերադարձնում է դաշտ 1 => դաշտ 2 զույգերով զանգված $result->fetchAllKeyed(); $result->fetchAllKeyed(0,2); // Դաշտ 0 => Դաշտ 2 $result->fetchAllKeyed(1,0); // Դաշտ 1 => Դաշտ 0 // Վերադարձնում է միայն մեկ սյունակի արժեքների զանգված $result->fetchCol(); // Ըստ ցանկության՝ նշված սյունակի $result->fetchCol($column_index); ?>
fetchAll()
և fetchAllAssoc()
լռելյայն կիրառում են fetch-ի եղանակը։ Դա կարող եք փոխել՝ նշելով fetch mode պարամետրերը։ 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 = db_query("SELECT title FROM {node} WHERE nid = :nid", array(':nid' => $nid))->fetchField(); ?>