Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: pdo - drugie zapytanie w pętli
Forum PHP.pl > Forum > PHP > Object-oriented programming
joytec
witam.dlaczego ponizszy kod nie dziala:

  1. <?php
  2. class kategorie_glowne{
  3. private $_db;
  4.  
  5. public function __construct($db){
  6. $this->_db = $db;
  7. }
  8.  
  9. public function wypisz(){
  10. $this->_db->setAttribute(PDO::ATTR_EMULATE_PREPARES, true);
  11. $stmt = $this->_db->prepare("SELECT k.name AS name, k.id AS ID FROM kategorie k WHERE NOT exists (SELECT * FROM powiazania p WHERE k.id = p.second_id AND p.depth = 1);");
  12. $stmt->execute();
  13. while($row=$stmt->fetch()){
  14. $stmt_2 = $this->_db->prepare("SELECT * FROM kategorie");
  15. $stmt_2->execute();
  16. while($row_2 = $stmt_2->fetch()){
  17. print("tutaj: " . $row_2["name"]);
  18. }
  19. if(isset($row_2)){
  20. $tablica[] = array("name" => $row["name"], "ID" => $row["ID"], "dzieci" => "true");
  21. }else{
  22. $tablica[] = array("name" => $row["name"], "ID" => $row["ID"], "dzieci" => "false");
  23. }
  24. }
  25. return $tablica;
  26. }
  27. }
  28. ?>
Sedziwoj
Bo coś robisz źle.

P.S. Powiedz dlaczego uważasz, że nie działa, wyrzuca błąd, zwraca złe wyniki?
P.P.S. Jak nie zwraca błędu to czy masz włączone raportowanie, a jak zwraca to jaki?
kosmowariat
nie chce strzelać ale miałem podobny problem przy czym wywalało błąd. być może chodzi o to że musisz ustawić atrybut PDO tak aby używało buforowanych zapytań USE_BUFFERED_QUERY czy jakoś tak. nie chce mi się szukac bo akurat powoli wybieram się juz spać biggrin.gif (5 nad ranem :/ ) Opisz dokładnie problem to poszukam rozwiązania
webdice
  1. <?php
  2. if(isset($row_2)){
  3. $tablica[] = array("name" => $row["name"], "ID" => $row["ID"], "dzieci" => "true");
  4. }else{
  5. $tablica[] = array("name" => $row["name"], "ID" => $row["ID"], "dzieci" => "false");
  6. }
  7. ?>


Ta część powinna być w 2 while.
wrzasq
gdybys dodal wypisywanie bledow zobaczylbys, co jest nie tak.

nie mozesz wykonac drugiego zapytania dopuki nie zamkniesz kursora pierwszego. masz dwa rozwiazania - albo wlaczysz bufor MySQLa ($this->_db->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true);), jednak to nie zawsze dziala, poza tym to opcja tylko dla MySQLa. innym rozwiazaniem jest uzycie fetchAll() zamiast fetch(). wtedy zamiast while($row = $stmt->fetch()) uzyj foreach($stms->fetchAll() as $row).
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.