Skocz do zawartości

[PHP i MYSQL] Problem z fetch_assoc()


elwierka

Rekomendowane odpowiedzi

Witajcie

Właśnie próbuję napisać aplikację do składania zamówień przez internet i mam problem z odczytywaniem wyników zapytań z bazy danych mysql :) . Pobieram dane z bazy i zwracam jako obiekt.

(fragment kodu)

$lacz = con_to_db(); //funkcja ustanawiająca połączenie z bazą
$zapytanie = "select * from klienci where login = '".$login."'";
$wynik = $lacz->query($zapytanie);

if (!$wynik) {
throw new Exception('Błąd.');
 } 

$ilosc = $wynik->num_rows;

if($ilosc > 0) {
while($rzad = $wynik->fetch_assoc()) {
   //np.:
	echo $rzad['adres']."<br />;
	echo $rzad['nip']."<br />;
}
} else {
echo "Komunikat o błędzie";
}

Niestety, jak odczytuję wyniki za pomocą fetch_assoc(), skrypt podczas wykonywania się, resetuje połączenie..."Połaczenie zostało przerwane podczas negocjacji" - pojawia się komunikat w tym stylu.

Nie ma jednak żadnego problemu, jeśli zamiast fetch_assoc() użyję fetch_row i odczytuję wyniki jako $rzad[0], $rzad[1] itd.....

Tak samo jest, jeśli chcę odczytać dane o wszystkich osobach, zawarte w tabeli klienci (nie dane konkretnej osoby).

Od kilku dni nie mogę sobie poradzić z tym problemem...a muszę dalej pisać aplikację...Czy ktoś z Was wie o co może chodzić? Dlaczego tak się dzieje?

Z góry dzięki za odp.

Odnośnik do komentarza
Udostępnij na innych stronach

Używasz interfejsu mysqli czy mysql do obsługi połączenia z bazą?

HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel
Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii

Odnośnik do komentarza
Udostępnij na innych stronach

A jak obsługujesz nawiązanie połączenie i zapytania ?

HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel
Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii

Odnośnik do komentarza
Udostępnij na innych stronach

W ogóle połączenie z bazą wydaje się być w porządku, wstawiać dane do bazy mogę bez problemów, tak samo nie ma problemu np przy logowaniu się do systemu...w monitorze mysql wywołuję tą samą instrukcję (select * from klienci;) i bez żadnego problemu pokazuje mi wyniki...problem jest właśnie przy odczytywaniu wyników i wyświetlaniu ich w przeglądarce

Fragment kodu :

session_start();
require_once('funkcje_aplikacji.php');  //dołączam plik, który dołacza pliki z funkcjami aplikacji, m.in //połączenia z bazą danych
tworz_nagl_html('Lista produktów');

  $lacz = con_to_db();
  $zapytanie = "select * from klienci where login = '".$login."'";
$wynik = $lacz->query($zapytanie);

if (!$wynik) {
throw new Exception('Błąd.');
 } 

$ilosc = $wynik->num_rows;

if($ilosc > 0) {
while($rzad = $wynik->fetch_assoc()) {
//np.:
	echo $rzad['adres']."<br />";
	echo $rzad['nip']."<br />";
}
} else {
echo "Komunikat o błędzie";
}

Natomiast funkcja con_to_db():

function con_to_db() {
@ $db = new mysqli('localhost','uzytkownik','haslo','nazwa_bazy_danych');
  if (!$db) {
  throw new Exception('Połączenie z serwerem bazy danych nie powiodło się');
  } else {
  return $db;
  }
}

edytka: cudzysłów przy <br />

Odnośnik do komentarza
Udostępnij na innych stronach

@W ogóle połączenie z bazą wydaje się być w porządku,

Skoro wszystko było by w porządku nie było by tego topicka. Nie wiemy co tam masz w kodzie przez pętla while...

---

Sprawdź działanie fetch assoc bez tych twoich funkcji osłonowych https://php.net/manual/pl/mysqli-result.fetch-assoc.php

HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel
Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii

Odnośnik do komentarza
Udostępnij na innych stronach

Zastosowany kod:

session_start();
require_once('funkcje_aplikacji.php');
tworz_nagl_html('Dane klienta');
sprawdz_zalogowanie_uzyt();

$lacz = con_to_db(); //funkcja ustanawiająca połączenie z bazą
$zapytanie = "select * from klienci where login = '".$_SESSION['user_ok']."'";
$wynik = $lacz->query($zapytanie);

if (!$wynik) {
throw new Exception('Błąd.');
 } 

$ilosc = $wynik->num_rows;

if($ilosc > 0) {
while($rzad = $wynik->fetch_assoc()) {
   //odczytywanie danych z kolumn tabeli, np.
	echo $rzad['adres']."<br />";
	echo $rzad['nip']."<br />";
}
} else {
echo "Komunikat o błędzie";
}


menu(); 
tworz_stopke();

i użyte funkcje:

function con_to_db() {
@ $db = new mysqli('localhost','user','pass','nazwa_db');
  if (!$db) {
  throw new Exception('Połączenie z serwerem bazy danych nie powiodło się');
  } else {
  return $db;
  }
}

function sprawdz_zalogowanie_uzyt() {
//funkcja sprawdza, czy użytkownik jest zalogowany, jeśli nie to informuje o tym
 if (isset($_SESSION['user_ok'])) {
  echo "Zalogowano jako ".$_SESSION['user_ok'].".<br />";
 } else {
 // nie jest zalogowany
 tworz_nagl_html('Nie zostałeś zalogowany do systemu:');
 echo 'Brak zalogowania.<br />';
 tworz_HTML_URL('logow_do_sys.php', 'Logowanie');
 tworz_stopke();
 exit;
 }

Odnośnik do komentarza
Udostępnij na innych stronach

Sprawdź działanie fetch assoc bez tych twoich funkcji osłonowych https://php.net/manual/pl/mysqli-result.fetch-assoc.php

Poza tym T woj styl kodowania jest archaiczny. Dziś stosuje się frameworki php [to tak na marginesie]...

HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel
Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii

Odnośnik do komentarza
Udostępnij na innych stronach

Uczę się dopiero php, to dlatego, ale na pewno im więcej będę programować, to styl mi się zmieni. Na razie przyswajam wiedzę książkową, przerabiam sobie gotowe skrypty, itp Jak już będę miała większe rozeznanie, to na pewno będę widziała więcej rozwiązań danych zagadnień. Im się więcej poznaje, tym ma się większą wiedzę na jakiś temat i można działać już na szerszym polu (wtedy już wiesz, co warto używać, a czego nie, w jakim stylu programować itp)... W każdym, bądź, razie, dzięki za uwagę :) popatrzę o tych frameworkach...

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli się uczysz to tym bardziej ucz się dobrego kodowania od początku...

HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel
Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii

Odnośnik do komentarza
Udostępnij na innych stronach

Rozwiązałam problem....tkwił oczywiście w instalacji PHP.

Po 1.

Brak skopiowanych plików .dll z php do kat. windows i windows/windows32

Brak skopiowanego pliku php.ini do kat. windows

Po 2.

W pliku, na którym testowałam ten fragment kodu, w zapytaniu do bazy mysql odwoływałam się do pól nie z tej tabeli .. nazwę zmieniłam, wszystko już super śmiga :)

Temat można uznać za zamknięty.

dzięki i pozdr.

Odnośnik do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę. Warunki użytkowania Polityka prywatności