Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Dwie metody w klasie korzystające z jednego połączenia bazy danych ?
Forum PHP.pl > Forum > Przedszkole
Mefiuu
Witam. Napisałem sobie dwie metody w klasie, które mają pobierać mi pewne dane z bazy MySQL. Dane są tak zorganizowane, że są powiązane jedną kolumną. Chcę sobie wyświetlić te dane, więc stworzyłem pierwszą metodę, która mi pobiera jakby 'dane główne'. Wyświetlam je w pętli, a następnie w tej samej pętli tak jakby przy każdej iteracji wywołuję kolejną metodę, która ma się łączyć z bazą danych i pobierać dane powiązane z konkretnym ID z konkretnej iteracji. No i tu gdzieś mam błąd, bo wyrzuca mi niestworzone ilości danych, których być nie powinno. Coś zdecydowanie jest w tej pętli, bo jak 'sztywno' przypiszę ID i przekażę je do drugiej metody poza pętlą to pobiera mi ładnie to co chcę ... Da się jakoś obsłużyć takie połączenie do bazy danych ?

metoda 1:

  1.  
  2. public function get_data() {
  3. $stmt = $this->pdo->query("SELECT * FROM `data` ORDER BY `id`, `order`");
  4.  
  5. while ($resource = $stmt->fetch(PDO::FETCH_ASSOC)) {
  6. $this->data[] = $resource;
  7. }
  8.  
  9. $stmt->closeCursor();
  10.  
  11. return $this->data;
  12. }
  13.  


metoda 2:

  1. public function get_another($id) {
  2. $st = $this->pdo->prepare("SELECT * FROM `data` WHERE `id` = :id");
  3.  
  4. $st->bindValue(':id', $id, PDO::PARAM_INT);
  5.  
  6. $st->execute();
  7.  
  8. while ($resource = $st->fetch(PDO::FETCH_ASSOC)) {
  9. $this->another[] = $resource;
  10. }
  11.  
  12. $st->closeCursor();
  13. }


i wywołanie:

  1. foreach ($main->data as $data) {
  2. if ($data['id_parent'] == 0)
  3. echo $data['name'];
  4.  
  5. $main->get_another($data['id']);
  6.  
  7. foreach ($main->another as $another) {
  8. echo "  ".$another['name']."<br />";
  9. }
  10. }



błędu składniowego nie ma, jeśli tu się wkradła literówka to proszę ją odpuścić, bo u mnie kod działa, ale niepoprawnie.

Z góry dziękuję za pomoc.

Pozdrawiam !
nospor
Nie ogarniam.... za pierwszym razem bierzesz wszystkie dane z tabeli DATA tylko po to, by za chwile w petli znowu leciec po dane z tabeli DATA..... gdzie tu sens i logika? To są dwie różne bazy danych bo z kodu tak nie wynika? Jesli wiec to jest jedna i ta sama baza danych, i ciagle latasz po tej samej tabeli, to poraz kolejny: gdzie tu sens i logika?
Mefiuu
w dużym skrócie chodzi o to, że:

pobieram sobie wszystkie dane za pierwszym razem (troszeczkę źle skonstruowałem zapytanie, powinno być pobranie niektórych danych), następnie je wyświetlam w pętli. Podczas wyświetlania w pętli wywołuję kolejną metodę, która ma za zadanie pobrać dane z tej samej tabeli w zależności od konkretnego numeru ID z tabeli. Jak można to obejść żeby to było logiczne i działało ?
nospor
Pomijajac juz bezsens tego kodu i brak logiki, to dane ci się mnożą jak kroliki, bo nie zerujesz tablicy $another przez co ona puchnie i z każdą kolejną iteracją po MAIN, wyswietlasz od nowa coraz to wiekszą tablice ANOTHER - stad namnożone rekordy.
Mefiuu
rzeczywiście, masz w 100% rację, zwykłe unset() na tablicy pozwoliło mi uniknąć mnożenia się danych.

Nie jestem z tych, którzy ślepo wierzą w swój kod, a skoro mówisz że jest bezsensowny to pewnie tak jest (zresztą sam trochę teraz to dostrzegam). Jednak chciałbym go poprawić, czym się kierować ?
nospor
Poprostu skoro pobierasz raz dane z DATA do MAIN, to te dane juz tam są. NIe ma sensu potem oddzielne po każdą daną znowu leciec do bazy, bo przeciez te dane juz są w tablicy MAIN
Mefiuu
ja pierdzielę ... uznajmy, że nie było tego pytania, proszę. Chyba za mało snu sciana.gif

teraz jedyne co mnie zastanawia to fakt, dlaczego mi w jednym przypadku pobiera daną, podając że jest powiązana z innym rekordem, gdy w rzeczywistości jest przywiązana do innego rekordu. Ale nad tym pomyślę. Dziękuję.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.