Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP]Dwie metody w klasie korzystające z jednego połączenia bazy danych ?
Mefiuu
post
Post #1





Grupa: Zarejestrowani
Postów: 371
Pomógł: 18
Dołączył: 23.11.2008

Ostrzeżenie: (0%)
-----


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 !

Ten post edytował Mefiuu 12.06.2014, 15:12:15
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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?


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Mefiuu
post
Post #3





Grupa: Zarejestrowani
Postów: 371
Pomógł: 18
Dołączył: 23.11.2008

Ostrzeżenie: (0%)
-----


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 ?
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Mefiuu
post
Post #5





Grupa: Zarejestrowani
Postów: 371
Pomógł: 18
Dołączył: 23.11.2008

Ostrzeżenie: (0%)
-----


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ć ?
Go to the top of the page
+Quote Post
nospor
post
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Mefiuu
post
Post #7





Grupa: Zarejestrowani
Postów: 371
Pomógł: 18
Dołączył: 23.11.2008

Ostrzeżenie: (0%)
-----


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ę.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 07:36