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