Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: pdo i rekurencja
Forum PHP.pl > Forum > PHP > Object-oriented programming
joytec
Dzien dobry.

na drugim poziomie wywolania rekurencyjnego mam blad przy $wynik-fetch() , blad $wynik nie jest obiektem. nie wiem czy ktos probowal rekurencje z pdo, jesli tak chetnie prosze o jakies sugestie. pozdrawiam.
dr_bonzo
Pokaz kod.
sf
@joytec: a nie lepiej przetestować na jakimś krótkim przykładowym kodzie? od razu będzie łatwiej podejść do problemu
joytec
przepraszam do poprawki. ok dwoja do dziennika.

  1. <?php
  2. interface categoriesList{
  3. public function categories($parent, $level);
  4. }
  5.  
  6. class categoriesListImpl implements categoriesList{
  7. private static $_dao;
  8.  
  9. public function __construct(PDOInter $connect){
  10. $this->_dao = $connect->getInstance();
  11. }
  12.  
  13. public function categories($parent, $level){
  14. print($level);
  15. $result_categories = $this->_dao->query('SELECT name, ID, ID_Parent FROM categories WHERE 
  16.  ID_Parent = $parent ;');
  17. if(count($result_categories)){
  18. while($rows = $result_categories->fetch()){
  19. str_repeat(' ', $level);
  20. print($rows['name']);
  21. $this->categories($rows['ID'], $level+1);
  22. }
  23.  
  24. }
  25. }
  26. }
  27. ?>


na drugim levelu mam taki blad :
Fatal error: Call to a member function fetch() on a non-object in C:\WebServer\Apache2\htdocs\ovadia\model\dao\categories.class.php on line 23
sf
Hm, $result_categories na pewno jest klasą? Sprawdź to.
joytec
nie. nie jest, nie wiem dlaczego dry.gif
sf
Masz błąd, już widzę nawet. Problemem jest to, że nie wyświetlasz błędów. Ustaw sobie może najlepiej by PDO wyrzucało wyjątki, albo ustaw wyświetlanie błędów i error_reporting na E_ALL.
joytec
o nie rozwiaze problemu. Polaczenie z baza mam w zmiennej statycznej wiec nie rozumiem dlaczego zmienna $result_categories nie jest obiektem.
sf
Problemem jest to, że to zapytanie sql zwróci błąd. Więc trudno by zwróciło obiekt z rekordami.
joytec
Cytat(sf @ 4.01.2007, 20:45:21 ) *
Problemem jest to, że to zapytanie sql zwróci błąd. Więc trudno by zwróciło obiekt z rekordami.


jak juz wczesniej napisalem mam 4 levele a blad wyswietla sie na drugim wiec ne ma takiej mozliwosci aby zapytanie sqloew zwrocilo blad. zreszta moglbys pokazac gdzie ten blad.
sf
  1. <?php
  2. echo 'SELECT name, ID, ID_Parent FROM categories WHERE ID_Parent = $parent' ;
  3. ?>


zamieni Ci to $parent na wartość?
joytec
Cytat(sf @ 4.01.2007, 21:58:43 ) *
  1. <?php
  2. echo 'SELECT name, ID, ID_Parent FROM categories WHERE ID_Parent = $parent' ;
  3. ?>


zamieni Ci to $parent na wartość?



spoko jest dobrze rozumiem ze nie mozesz mi pomoc. dziekuje za checi
DeyV
joytec - czytaj uważniej, zamiast unosić się honorem. W zawodzie programisty to bardzo niezdrowe...

sf udzielił ci odpowiedzi już parę postów wcześniej, jednak nie raczyłeś jej uwzględnić. A powiedział Ci, bys ustawić, by PDO zwracało Ci wyjątki z błędami SQL - inaczej bardzo trudno jest je wykrywać w przypadku tej biblioteki.
Wtedy szybko byś się przekonał, że różnica pomiędzy ' (apostrof) a " (cudzysłów) jest nieco większa, niż się niektórym wydaje...


OT. Kurcze - skąd u informatyków bierze się takie zadufanie w sobie? Ostatnio ciągle mam do czynienia w tej branży z nadętymi "osobowościami".
I dziwić się później, że społeczeństwo paczy na ludzi z branży IT jak na dziwaków...
joytec
Cytat(DeyV @ 4.01.2007, 22:29:43 ) *
joytec - czytaj uważniej, zamiast unosić się honorem. W zawodzie programisty to bardzo niezdrowe...

sf udzielił ci odpowiedzi już parę postów wcześniej, jednak nie raczyłeś jej uwzględnić. A powiedział Ci, bys ustawić, by PDO zwracało Ci wyjątki z błędami SQL - inaczej bardzo trudno jest je wykrywać w przypadku tej biblioteki.
Wtedy szybko byś się przekonał, że różnica pomiędzy ' (apostrof) a " (cudzysłów) jest nieco większa, niż się niektórym wydaje...
OT. Kurcze - skąd u informatyków bierze się takie zadufanie w sobie? Ostatnio ciągle mam do czynienia w tej branży z nadętymi "osobowościami".
I dziwić się później, że społeczeństwo paczy na ludzi z branży IT jak na dziwaków...



doprawdy nie rozumiem wszystkie zeczy o ktorych mowi "sf" sa uwzglednione w moim skrypcie i nie rozwiazuja problemu. czasami mam tez takie wrazenie a co wiecej PROSZE MNIE NIE OBRAZAC jakims ogolem. Czasami ludzie pisza rozne bzdety aby podniesc licznik postow a przeciez nie o ilosc a o jakosc chodzi prawda!?
MrMag
nie jestem pewien, ale gdzies wyczytalem, ze w pdo/opd rekurencja w zapytaniach jest niemozliwa a przynajmniej niezalecana (to 2 zreszta ogolnie jest niezalecane winksmiley.jpg)
DeyV
Cytat(sf @ 4.01.2007, 21:58:43 ) *
  1. <?php
  2. echo 'SELECT name, ID, ID_Parent FROM categories WHERE ID_Parent = $parent' ;
  3. ?>


zamieni Ci to $parent na wartość?


Choroba jasna - wykonałeś ten kod?questionmark.gif?
Nie widzisz, co jest nie tak?
joytec
Ja sie unosze honorem ja podziekowalem grzecznie i sie nie skarze u wyzszej instancji sorkiii....
DeyV
?
joytec
tak wszystko jest jak nalezy
  1. "SELECT name, ID, ID_Parent FROM categories WHERE ID_Parent = " . $parent .";"
DeyV
Jeśli chcesz stosować zapis rozbity, to równie dobrze (a może i lepiej winksmiley.jpg ) będzie skorzystać właśnie z ' (apostrofów)
Natomiast " (cudzysłów) pozwoliłby na zapis taki, jak w pierwszym przypadku. Nie jest to jednak zalecane, ponieważ obniża czytelność kodu.
joytec
gratuluje to nie rozwiazalo mojego problemu
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.