Rad sa bazom podataka u Drupal 7 - lekcija 7 - Obrada rezultata upita (fetch)
Upit za selekciju uvek vraća rezultat obrade upita kao 0 ili više zapisa. Postoji nekoliko načina da se obrade podaci iz rezultata upita, koje možete koristiti prema sopstvenoj proceni.
Najčešće se rezultati koriste u vidu petlje foreach().
<?php $result = db_query("SELECT nid, title FROM {node}"); foreach ($result as $record) { // radimo nešto sa svakim $record $node = node_load($record->nid); } ?>
U zavisnosti od toga šta treba da uradite sa rezultatom, možete koristiti i druge načine obrade zapisa. Za eksplicitnu obradu sledećih zapisa koristite:
<?php $record = $result->fetch(); // Podrazumevana obrada (objekat). $record = $result->fetchObject(); // Obrađuje se kao objekat. $record = $result->fetchAssoc(); // Obrađuje se kao asocijativni niz. ?>
Ako zapisa više nema, biće vraćeno FALSE. Umesto običnog fetch() preporučuje se korišćenje fetchObject() ili fetchAssoc(), jer jasnije ukazuju kako će se zapisi obrađivati. Takođe, moguće je promeniti način obrade fetch() po podrazumevanoj vrednosti. Za dobijanje jedne vrednosti koristite:
<?php $record = $result->fetchField($column_index); ?>
Podrazumevana vrednost za $column_index je 0. Za brojanje redova u rezultatu koristite:
<?php $number_of_rows = $result->rowCount(); ?>
Za dobijanje svih zapisa u jedan niz koristite:
<?php // Vraća rezultat kao niz objekata. $result->fetchAll(); // Vraća rezultat kao asocijativni niz sa ključem naziva polja i vrednošću $result->fetchAllAssoc($field); // Vraća rezultat druge kolone u asocijativni niz Polje 1 => Polje 2 $result->fetchAllKeyed(); $result->fetchAllKeyed(0,2); // niz će biti Polje 0 => Polje 2 $result->fetchAllKeyed(1,0); // niz će biti Polje 1 => Polje 0 // Vraća jednu kolonu kao niz. $result->fetchCol(); // Broji broj zapisa za kolonu (podrazumevano prva kolona) $result->fetchCol($column_index); ?>
Napomena: fetchAll() i fetchAllAssoc() po podrazumevanoj vrednosti koriste način fetch ako je podešen. Ovo se može podesiti prosleđivanjem odgovarajuće konstante kao parametra: za fetchAll() prvi parametar, za fetchAllAssoc() drugi parametar.
Pošto PHP podržava metodu lančanja za vraćene objekte, moguće je potpuno izostaviti promenljivu $result i direktno koristiti:
<?php // Dobijanje asocijativnog niza nid => title $nodes = db_query("SELECT nid, title FROM {node}")->fetchAllKeyed(); // Dobijanje jednog zapisa iz baze kao objekta $node = db_query("SELECT * FROM {node} WHERE nid = :nid", array(':nid' => $nid))->fetchObject(); // Dobijanje jedne vrednosti iz baze $title = db_query("SELECT title FROM {node} WHERE nid = :nid", array(':nid' => $nid))->fetchField(); ?>