dopiero raczkuje w dziedzinie projketowania obiektowego, wiec prosilbym o w miare przystępne wyjaśnienie rozwiązania.
Otóż, często operując na elementach z bazdy danych, trzeba wyświetlić ich kilka, jeden pod drugim. W programowaniu proceduralnym robiłem to tak (uzywajac mysqli):
Pytanie moje jest następujące. Jak osiągnąć podobny efekt operując na klasach?
<?php $baza = new mysqli ('localhost', 'login', 'haslo', 'baza'); $odczytaj = "SELECT * FROM `wiadomosci` ORDER BY `id` DESC LIMIT 10 "; $news = $baza->query($odczytaj); $liczba_newsow = $news->num_rows; for ($i=0; $liczba_newsow > $i; $i++) { $rekord = $news->fetch_assoc(); } ?>
Załóżmy że mam coś takiego:
Jak można wyciągnąć z tego wszystkie dane? Bo metoda pobierzOstatnie() zwraca mi jdynie ostatnie id ostatniego rekordu... (możliwe, że gdzieś zrobiłem błąd).
<?php class News { private $db; // uchwyt bazy private $cfg; // konfiguracja private $id; // [..] dalsze zmienne private $kategoria; public function __construct() { $this->db = new DB(); $this->cfg = new Config(); } public function pobierzDane($id) { $sql = "SELECT * FROM `".$this->cfg->prefix."_news` WHERE `id` = '".$id."' LIMIT 1;"; $zapytanie = $this->db->query($sql); $dane = $this->db->fetch($zapytanie); $this->id = $dane['id']; $this->tytul = $dane['tytul']; $this->tresc = $dane['tresc']; $this->tagi = $dane['tagi']; $this->notatki = $dane['notatki']; $this->data = $dane['data']; $this->odslony = $dane['odslony']; $this->obrazek = $dane['obrazek']; $this->kategoria = $dane['kategoria']; } public function pobierzOstatnie($ilosc, $poczatek=0, $kategoria=0) { $sql = "SELECT id FROM `".$this->cfg->prefix."_news` WHERE `kategoria` = '".$kategoria."' ORDER BY `id` DESC LIMIT ".($poczatek*$ilosc).", ".$ilosc.";"; $zapytanie = $this->db->query($sql); $dane = $this->db->fetch($zapytanie); return $dane; } public function getId() { return $this->id; } // [..] kolejne analogiczne metody public function getObrazek() { return $this->obrazek; } } ?>
W moim zamierzeniu było, aby metoda pobierzOstatnie() zwracała mi id kolenych newsów, które później wykorzystywał bym do wywołania metody pobierzDane() z $id otrzymanym z metody pobierzOstatnie().
Tak na marginesie, mozemy zalozyc ze mam sterownik w tym stylu:
Na PDO, jeszcze przyjdzie czas, zreszta z tej postaci to nie będzie problem...
<?php class DB { public function __construct() { } public function query($sql) { } public function num_rows($sql) { } public function fetch($sql) { } } ?>
Mam nadzieje, że nie napisałem tego przesadnie chaotycznie i da sie cos z tego zrozumiec...
Z gory dziekuje za pomoc
