Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> pdo - drugie zapytanie w pętli
joytec
post 16.08.2007, 22:56:20
Post #1





Grupa: Zarejestrowani
Postów: 66
Pomógł: 0
Dołączył: 24.06.2005

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


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. ?>


Ten post edytował joytec 17.08.2007, 10:20:56
Go to the top of the page
+Quote Post
Sedziwoj
post 17.08.2007, 13:18:50
Post #2





Grupa: Zarejestrowani
Postów: 793
Pomógł: 32
Dołączył: 23.11.2006
Skąd: Warszawa

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


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?


--------------------
Algorytmy w PHP, czy ktoś o tym słyszał?
Dlaczego tak mało kobiet programuje? ponieważ nie zajmują się głupotami.
Go to the top of the page
+Quote Post
kosmowariat
post 18.08.2007, 04:21:29
Post #3





Grupa: Zarejestrowani
Postów: 235
Pomógł: 17
Dołączył: 18.07.2007
Skąd: Białystok

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


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
Go to the top of the page
+Quote Post
webdice
post 18.08.2007, 10:18:34
Post #4


Developer


Grupa: Moderatorzy
Postów: 3 045
Pomógł: 290
Dołączył: 20.01.2007




  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.
Go to the top of the page
+Quote Post
wrzasq
post 22.08.2007, 16:47:28
Post #5





Grupa: Zarejestrowani
Postów: 206
Pomógł: 18
Dołączył: 6.03.2006
Skąd: Szczecin

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


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).


--------------------
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 Wersja Lo-Fi Aktualny czas: 22.06.2025 - 12:18