Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zapytanie PDO w klasie
Forum PHP.pl > Forum > PHP
voxupog
Witam
ma problem ze nawet nie wiem pod jakim tematem tego szukać sad.gif

mam klasę team:

  1. class team
  2. {
  3. public $name;
  4. public $ustawienie;
  5. public $zawodnicy;
  6.  
  7. public function pobierzteam()
  8. {
  9. echo $this->name;
  10. $zapytanie = $pdo -> query("SELECT ustawienie FROM druzyna WHERE team='1'");
  11. $row = $zapytanie->fetch();
  12. $this->ustawienie = $row['ustawienie'];
  13.  
  14. }
  15.  
  16. };


kiedy $zapytanie jest wywoływane poza klasa wszystko jest ok.
w klasie wyskakuje mi taki błąd: Fatal error: Call to a member function query() on a non-object in C:\xampp\htdocs\utf8_game\include\rozgrywka.php on line 14

nieaktualne ;P
red9skull
Nie masz utworzonego obiektu $pdo - btw ten temat zasługuje na przedszkole.
Blame
Błąd chyba coś powinien mówić. Nie widzę nigdzie $pdo = new PDO($db, $user, $pass);, czy jakoś tak. Nie wiem nie używam PDO tongue.gif
Atomic_Cookie`
Albo użyjesz Global (nie zalecane) albo:

  1. class team
  2. {
  3. public $name;
  4. public $ustawienie;
  5. public $zawodnicy;
  6.  
  7. public function pobierzteam($uchwyt_do_pdo)
  8. {
  9. echo $this->name;
  10. $zapytanie = $uchwyt_do_pdo -> query("SELECT ustawienie FROM druzyna WHERE team='1'");
  11. $row = $zapytanie->fetch();
  12. $this->ustawienie = $row['ustawienie'];
  13.  
  14. }
  15.  
  16. };

Potem wywołujesz
$team = new team;
$team -> pobierzteam(zmienna uchwyt do pdo);
tzn. że jak gdzieś dałeś
  1. $pdo = new PDO('', 'root', 'root');
To jako uchwyt podajesz zmienną $pdo. Najlepiej poczytaj o zasięgu zmiennych ;]
//1-szy post.
edit: nvm
outsider
Wystarczy:
  1. class team
  2. {
  3. public $name;
  4. public $ustawienie;
  5. public $zawodnicy;
  6.  
  7. public function pobierzteam()
  8. {
  9. global $pdo; // musisz uwidocznic zmienna
  10.  
  11. echo $this->name;
  12. $zapytanie = $pdo -> query("SELECT ustawienie FROM druzyna WHERE team='1'");
  13. $row = $zapytanie->fetch();
  14. $this->ustawienie = $row['ustawienie'];
  15.  
  16. }
  17.  
  18. };
cepa
u mnie w robocie za uzywanie global mozna dostac kopa w dupe tongue.gif

ogolnie:
1 - utworz sobie setter i getter na skladowa protected $_pdo;
2 - w konstruktorze klasy mozesz ladowac domyslny obiekt pdo
3 - domyslny obiekt pdo powinien byc singletonem
4 - aby zrobic z pdo singletona musisz go przeciarzyc ale jest to ogolnei banalne

ale to tyle w temacie pdo, bo imho masz zly design swojej klasy, myslales moze o zrobieniu sobie nakladki do wkonywania zapytan i pobierania wynikow? troche wiecej kodu na poczatek ale pozniej mniej refaktoringu smile.gif
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.