Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: DBlib - fetch() resetuje fetch() zewnętrzny
Forum PHP.pl > Forum > Bazy danych > Microsoft SQL Server / MSDE
qoonieczko
Witam,

Ciężko mi było w tytule umieścić to o co mi chodzi:)
mam taki kod:
  1. <?php
  2.  
  3. try {
  4. // create a new connection (verify that your web server can communicate with db server and validate credentials)
  5. $conn = new PDO( 'dblib:charset=cp1250;dbname=baza;host=10.1.1.25:1683', 'login', 'haslo' );
  6.  
  7. // prepare a statement to prevent SQL injections
  8. $stmt = $conn->prepare( "select res_id from tabela where repto_id='21'" );
  9.  
  10. /* populate the arguments in your prepared statement.
  11.   needs to be an array even though there is only one argument. */
  12. $stmt->execute();
  13.  
  14. // fetch all results
  15. // $locations = $stmt->fetchAll();
  16. while ($row = $stmt->fetch()) {
  17. echo $row['res_id'];
  18. $stmt2 = $conn->prepare( "select fullname from tabela where res_id='21'" );
  19. $stmt2->execute();
  20. while ($row2 = $stmt2->fetch()) {
  21. echo $row2['fullname'];
  22. }
  23.  
  24. }
  25. // encode as JSON
  26.  
  27. // echo json_encode( $locations );
  28.  
  29. } catch (Exception $e) {
  30. echo $e->getMessage();
  31. }
  32. ?>


Pierwsze zapytanie zwraca 12 wyników. Więc powinienem mieć 12 numerków i co numerek fullname kolesia o nr 21. Mam jednak tylko pierwszy numerek i raz nazwisko. Te zapytanie w środku resetuje te zewnętrzne. Jak jest tylko jedno zapytanie to wyników jest 12. Ma ktoś jakiś pomyśl jak to naprawić? Mam to na ubuntu. Robiłem lokalnie na windowsie i wszystko działało. Tam miałem tylko zamiast dblib- sqlsrv. Będę wdzięczny za wskazówki.
nospor
while ($row = $stmt->fetchAll()) {
skad wy wytrzaskujecie te potforki?? nie fetchAll a fetch
qoonieczko
Już w pierwszym poście poprawiłem. Próbowałem i tak i tak i nie działa. z fetchAll nie ma nic, a z fetch jest tylko jeden wynik sad.gif
nospor
Wyglada jakby twoja baza sie wykladala na buforowaniu. Czemu nie uzyjesz jak czlowiek poprostu LEFT JOIN tylko bawisz sie w zapetlnie zapytan? Przeciez to bezsensu.
qoonieczko
To jest tylko przykładowy kod. Mam zapytania, które muszę się wykonywać w fetchu innego zapytania i nie wyciągniesz tych danych przez joina. Nie sądzę, żeby to była wina bazy, bo ten sam kod na windowsie, ale z biblioteką sqlsrv działa. Tutaj jest coś nie tak z dblib.
nospor
No to mowie: widac ze dblib ma problemy z buforowaniem chyba. Poszukaj w necie.

A jakbys podal pelne zapytanie to moze bysmy ci pomogli je napisac poprawnie.

A jesli zadne z moich dwoch 'rozwiazan' ci nie pasuja, to pobierz wpierw dane z pierwszego zapytania do tablicy, a potem iteruj po tej tablicy i rob co tam robisz do tej pory.
qoonieczko
To jest całkiem spora aplikacja i nie uśmiecha mi się tyle zmieniać. Plan był taki, że robię na lokalu, bo szybciej i wygodniej, a potem przenoszę, zmieniam w jednym pliku "sqlsrv" na "dblib" i gotowe. Nie spodziewałem się takich problemów, bo przed wszystkim testowałem czy wszystko działa, ale nie wpadłem na to, żeby sprawdzić czy zapytanie fetchowane w innym fetchu będzie działać. Masakra!
nospor
https://bugs.php.net/bug.php?id=65945
Czyli jak mowilem pozostaje ci wpierw pobrac dane z pierwszego zapytania lub bawic sie w dwa polaczenia
qoonieczko
Tak łatwo się nie poddam smile.gif Spróbuje jeszcze zainstalować odbc. Może z tym będzie działać...
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-2024 Invision Power Services, Inc.