Աշխատանք տվյալների բազայի հետ 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();
?>