Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][MYSQL][PDO]Proste skrypt pobierający wyniki, General error: 2014 Cannot execute queries while other unbuffered quer
matssuda
post 19.08.2008, 14:51:11
Post #1





Grupa: Zarejestrowani
Postów: 25
Pomógł: 5
Dołączył: 7.02.2008

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


Witam.

Mam problem ze skryptem php łączącym się z MySql przez PDO i pobierającym wyniki.
Skrypt na serwerze (nazwa.pl) generuje błąd (na localu jest ok):
Cytat
General error: 2014 Cannot execute queries while other unbuffered queries are active. Consider using PDOStatement::fetchAll(). Alternatively, if your code is only ever going to run against mysql, you may enable query buffering by setting the PDO::MYSQL_ATTR_USE_BUFFERED_QUERY attribute.


Oto skrypt (uposzczony, ale chodzi o sens):

  1. <?php
  2. try
  3. {
  4. $pdo = new PDO(DATABASE, USER, PASS);
  5. $pdo -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  6.  
  7. $query_1 = $pdo->query('SELECT * FROM `tabela_1`');
  8.  
  9. while ($row=$query_1->fetch())
  10. {
  11. echo $row['tabela_1_id'];
  12.  
  13. $query_2 = $pdo->query('SELECT * FROM `tabela_2` WHERE tabela_2_id = '.$row['tabela_1_id'].' ');
  14.  
  15. while ($rows=$query_2->fetch())
  16. {
  17. echo $rows['tabela_2_id'];
  18.  
  19. }
  20.  
  21. $query_2 -> closeCursor(); 
  22.  
  23. }
  24.  
  25. $query_1 -> closeCursor(); 
  26.  
  27. }
  28.  
  29. catch(PDOException $e)
  30. {
  31. echo 'Nie polaczono: ' . $e->getMessage();
  32. }
  33. ?>


Czytałem, że to błąd niezamknięcia połączenia i wywoływanie drugiego.
Ale nie mam zielonego pojęcia jak to uzyskać inaczej.
Nie gromcie od razu, jestem w przedszkolu smile.gif
Go to the top of the page
+Quote Post
szpakoo
post 19.08.2008, 15:20:17
Post #2





Grupa: Zarejestrowani
Postów: 122
Pomógł: 16
Dołączył: 19.04.2007

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


Cytat
Czytałem, że to błąd niezamknięcia połączenia i wywoływanie drugiego.
Ale nie mam zielonego pojęcia jak to uzyskać inaczej.

no jeśli chodzi o to to powinieneś zmienic
  1. <?php
  2. //to
  3. $query_1 -> closeCursor(); 
  4. //na to
  5. $query_1 -> closeCursor(); 
  6. $query_1=NULL;
  7. //analogicznie w innych zapytaniach kursora
  8. ?>


ale warto spojrzeć na Twoje zapytania żeby zobaczyć, że niepotrzebnie wywołujesz dwa zapytania, można ten sam efekt uzyskać jednym, no chyba że tak uprościłeś kod podany na forum że jest inaczej


--------------------
Go to the top of the page
+Quote Post
matssuda
post 19.08.2008, 17:57:43
Post #3





Grupa: Zarejestrowani
Postów: 25
Pomógł: 5
Dołączył: 7.02.2008

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


nawet to robię to w ten sposób:
  1. <?php
  2. //zamknięcie połącznia
  3. $query_1 -> closeCursor(); $query_1=NULL; unset($query_1);
  4. ?>

i niestety wywala błąd. Tak jak pisałem - na localu jest ok (XAMPP), ale na serwerze już nie.

Czyli nie mogą byc otwarete 2 połączenia naraz?
Mozna by połączyć tabele i zrobić to jednym zapytaniem, ale mnie bardziej interesuje rozwiązanie takie jak podałem. Jak to jest niemozliwe to ok - chcę tylko wiedzieć.
Go to the top of the page
+Quote Post
nospor
post 19.08.2008, 18:04:49
Post #4





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




dodaj atrybut odnosnie buforowania:

  1. <?php
  2. $pdo = new PDO(DATABASE, USER, PASS);
  3. $pdo -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  4. $pdo->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true);
  5. ?>


ps: takie zapytania w petli to bardzo, bardzo, bardzo, bardzo nieoptymalne rozwiązanie. To sie robi jednym zapytaniem.


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

"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
matssuda
post 19.08.2008, 18:28:11
Post #5





Grupa: Zarejestrowani
Postów: 25
Pomógł: 5
Dołączył: 7.02.2008

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


dziękuję za pomoc, teraz działa.

Wiem że to nie jest optymalne rozwiązanie, ale byłem ciekaw.
Jestem na etapie poznawania php i baz danych więc jeszcze się mną znudzicie smile.gif
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: 12.07.2025 - 17:23