Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MYSQL I PHP] Problem z fetch_assoc
elwierka
post
Post #1





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

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


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 :shout: . Pobieram dane z bazy i zwracam jako obiekt.
(fragment kodu)
  1. $lacz = con_to_db(); //funkcja ustanawiająca połączenie z bazą
  2. $zapytanie = "select * from klienci where login = '".$login."'";
  3. $wynik = $lacz->query($zapytanie);
  4.  
  5. if (!$wynik) {
  6. throw new Exception('Błąd.');
  7. }
  8.  
  9. $ilosc = $wynik->num_rows;
  10.  
  11. if($ilosc > 0) {
  12. while($rzad = $wynik->fetch_assoc()) {
  13. echo $rzad['adres']."<br />;
  14. echo $rzad['nip']."<br />;
  15. }
  16. } else {
  17. echo "Komunikat o błędzie";
  18. }

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.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 14)
Mchl
post
Post #2





Grupa: Zarejestrowani
Postów: 855
Pomógł: 145
Dołączył: 17.07.2008
Skąd: High Memory Area

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


Tak na pierwszy rzut oka brakuje cudzysłowów tutaj:

Kod
echo $rzad['adres']."<br />";
echo $rzad['nip']."<br />";


Rozumiem, że $lacz to obiekt MySQLi?
Go to the top of the page
+Quote Post
elwierka
post
Post #3





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

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


wiem wiem (IMG:style_emoticons/default/smile.gif) zauważyłam, pisałam tu kod "z palca" i zapomniałam, że nie ma automatycznego zamykania cudzysłowów (IMG:style_emoticons/default/winksmiley.jpg) - i już nie chciałam edytować postu... ale w skrypcie jest zamknięty (IMG:style_emoticons/default/smile.gif)

tak, $ lacz to obiekt mysqli....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
Go to the top of the page
+Quote Post
Mchl
post
Post #4





Grupa: Zarejestrowani
Postów: 855
Pomógł: 145
Dołączył: 17.07.2008
Skąd: High Memory Area

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


No to pokaż prawdziwy kod (IMG:style_emoticons/default/tongue.gif)

co się dzieje jak użyjesz
Kod
$rzad = $wynik->fetch_array(MYSQLI_ASSOC);
Go to the top of the page
+Quote Post
elwierka
post
Post #5





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

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


Tak więc, przedstawiam kod. Funkcje tworz_nagl_html(), menu(), tworz_stopke() mają jedynie za zadanie wyświetlić te elementy na stronie.

  1. require_once('funkcje_aplikacji.php');
  2. tworz_nagl_html('Dane klienta');
  3. sprawdz_zalogowanie_uzyt();
  4.  
  5. $lacz = con_to_db(); //funkcja ustanawiająca połączenie z bazą
  6. $zapytanie = "select * from klienci where login = '".$_SESSION['user_ok']."'";
  7. $wynik = $lacz->query($zapytanie);
  8.  
  9. if (!$wynik) {
  10. throw new Exception('Błąd.');
  11. }
  12.  
  13. $ilosc = $wynik->num_rows;
  14.  
  15. if($ilosc > 0) {
  16. while($rzad = $wynik->fetch_assoc()) {
  17. //odczytywanie danych z kolumn tabeli, np.
  18. echo $rzad['adres']."<br />";
  19. echo $rzad['nip']."<br />";
  20. }
  21. } else {
  22. echo "Komunikat o błędzie";
  23. }
  24.  
  25. menu();
  26. tworz_stopke();
  27.  


wykorzystywane funkcje:

  1. function con_to_db() {
  2. @ $db = new mysqli('localhost','user','pass','nazwa_db');
  3. if (!$db) {
  4. throw new Exception('Połączenie z serwerem bazy danych nie powiodło się');
  5. } else {
  6. return $db;
  7. }
  8. }
  9.  
  10. function sprawdz_zalogowanie_uzyt() {
  11. //funkcja sprawdza, czy użytkownik jest zalogowany, jeśli nie to informuje o tym
  12. if (isset($_SESSION['user_ok'])) {
  13. echo "Zalogowano jako ".$_SESSION['user_ok'].".<br />";
  14. } else {
  15. // nie jest zalogowany
  16. tworz_nagl_html('Nie zostałeś zalogowany do systemu:');
  17. echo 'Brak zalogowania.<br />';
  18. tworz_HTML_URL('logow_do_sys.php', 'Logowanie');
  19. tworz_stopke();
  20. }


Nie mam w tym momencie możliwości spr
  1. $rzad = $wynik->fetch_array(MYSQLI_ASSOC);


sprawdzę po południu i dam znać co się dzieje.

No niestety dzieje się to samo, czyli resetuje się połączenie...

"Przerwane połączenie
Połączenie z serwerem zostało zresetowane podczas wczytywania strony.
Połączenie sieciowe zostało przerwane podczas negocjacji. Spróbuj ponownie."

Go to the top of the page
+Quote Post
Mchl
post
Post #6





Grupa: Zarejestrowani
Postów: 855
Pomógł: 145
Dołączył: 17.07.2008
Skąd: High Memory Area

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


Masz ustawione wyświetlanie błędów?
Go to the top of the page
+Quote Post
elwierka
post
Post #7





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

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


display_errors = On
Go to the top of the page
+Quote Post
Mchl
post
Post #8





Grupa: Zarejestrowani
Postów: 855
Pomógł: 145
Dołączył: 17.07.2008
Skąd: High Memory Area

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


a poziom raportowania?

Kod
error_reporting(E_ALL);
gdzieś na początku
Go to the top of the page
+Quote Post
elwierka
post
Post #9





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

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


error_reporting = E_ALL & ~E_NOTICE

display_startup_errors = Off

log_errors = Off

extension=php_mysqli.dll
Go to the top of the page
+Quote Post
Mchl
post
Post #10





Grupa: Zarejestrowani
Postów: 855
Pomógł: 145
Dołączył: 17.07.2008
Skąd: High Memory Area

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


okok, wszystko jak trzeba... (IMG:style_emoticons/default/winksmiley.jpg)

Tylko dlaczego nie działa? Nie widzę nic :/

Co mówi var_dump($wynik) ?
Go to the top of the page
+Quote Post
elwierka
post
Post #11





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

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


odpowiada:

  1. object(mysqli_result)#2 (0) { }


W katalogu serwera /log znalazlam plik error i po próbie wywołania tego nieszczęsnego skryptu pojawiła się taka linijka informacji:

  1. [Tue Apr 20 20:56:28 2010] [notice] Parent: child process exited with status 3221225477 -- Restarting.
  2. httpd.exe: Could not reliably determine the server's fully qualified domain name, using 192.168.1.18 for ServerName
  3. [Tue Apr 20 20:56:30 2010] [notice] Apache/2.2.11 (Win32) PHP/5.2.13 configured -- resuming normal operations
  4. [Tue Apr 20 20:56:30 2010] [notice] Server built: Dec 10 2008 00:10:06
  5. [Tue Apr 20 20:56:30 2010] [notice] Parent: Created child process 1668
  6. httpd.exe: Could not reliably determine the server's fully qualified domain name, using 192.168.1.18 for ServerName
  7. httpd.exe: Could not reliably determine the server's fully qualified domain name, using 192.168.1.18 for ServerName
  8. [Tue Apr 20 20:56:30 2010] [notice] Child 1668: Child process is running
  9. [Tue Apr 20 20:56:30 2010] [notice] Child 1668: Acquired the start mutex.
  10. [Tue Apr 20 20:56:30 2010] [notice] Child 1668: Starting 64 worker threads.
  11. [Tue Apr 20 20:56:31 2010] [notice] Child 1668: Starting thread to listen on port 80.
  12. [Tue Apr 20 20:56:31 2010] [notice] Parent: child process exited with status 3221225477 -- Restarting.
  13. httpd.exe: Could not reliably determine the server's fully qualified domain name, using 192.168.1.18 for ServerName
  14. [Tue Apr 20 20:56:32 2010] [notice] Apache/2.2.11 (Win32) PHP/5.2.13 configured -- resuming normal operations
  15. [Tue Apr 20 20:56:32 2010] [notice] Server built: Dec 10 2008 00:10:06
  16. [Tue Apr 20 20:56:32 2010] [notice] Parent: Created child process 2512
  17. httpd.exe: Could not reliably determine the server's fully qualified domain name, using 192.168.1.18 for ServerName
  18. httpd.exe: Could not reliably determine the server's fully qualified domain name, using 192.168.1.18 for ServerName
  19. [Tue Apr 20 20:56:32 2010] [notice] Child 2512: Child process is running
  20. [Tue Apr 20 20:56:32 2010] [notice] Child 2512: Acquired the start mutex.
  21. [Tue Apr 20 20:56:32 2010] [notice] Child 2512: Starting 64 worker threads.
  22. [Tue Apr 20 20:56:32 2010] [notice] Child 2512: Starting thread to listen on port 80.




Nie wiem, może jakieś ustawienia serwera muszę zmienić? Może w php.ini....nie wiem co się dzieje ale taki głupi błąd blokuje mnie z pisaniem już od dwóch dni (IMG:style_emoticons/default/wstydnis.gif)

A jeszcze w pliku serwera /log/access jest taki zapis:

  1. 127.0.0.1 - - [20/Apr/2010:21:21:57 +0200] "GET /wsh/wsh/produkty.php HTTP/1.1" 200 1339
  2. 127.0.0.1 - - [20/Apr/2010:21:21:57 +0200] "GET /wsh/wsh/includes/css/style.css HTTP/1.1" 304 -
  3. 127.0.0.1 - - [20/Apr/2010:21:22:04 +0200] "GET /wsh/wsh/produkty.php HTTP/1.1" 200 176


treść tego skrypciku zapisałam dla testów w pliku produkty.php
Go to the top of the page
+Quote Post
Mchl
post
Post #12





Grupa: Zarejestrowani
Postów: 855
Pomógł: 145
Dołączył: 17.07.2008
Skąd: High Memory Area

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


Jeśli apacz się wywraca przy czymś takim, to jedyne co mi przychodzi do głowy, to jakaś trefna instalacja PHP albo Apache...
W kodzie nie widzę nic niepoprawnego.
Go to the top of the page
+Quote Post
elwierka
post
Post #13





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

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


nooo superrr....krok do przodu (IMG:style_emoticons/default/biggrin.gif) sprawdziłam no i nie przekopiowałam plików .dll z katalogu php do katalogu Windows i windows/windows32 no i pliku php.ini do windows ..... serwer się teraz nie resetuje, ale jeszcze nie wyświetla wynikow....

  1. if($num>0){
  2. while($rzad = $wynik->fetch_assoc()){
  3. echo $rzad['nip']."<br />";
  4. echo $rzad['adres']."<br />";
  5. echo $rzad['login']."<br />";
  6. echo $rzad['nazwa_pelna']."<br />";
  7. }
  8. }


przy wyświetlaniu wyników, mam tylko <br />....będę grzebać dalej...może o czymś jeszcze zapomniałam...
Go to the top of the page
+Quote Post
Mchl
post
Post #14





Grupa: Zarejestrowani
Postów: 855
Pomógł: 145
Dołączył: 17.07.2008
Skąd: High Memory Area

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


Włącz sobie raportowanie na poziomie E_ALL (a nie E_ALL & ~E_NOTICE). Wyświetlą Ci się wtedy informacje o nie zdefiniowanych zmiennych itp. Możliwe że masz na przykład pomyłki w nazwach pól tabeli (małe/duże litery)
Go to the top of the page
+Quote Post
elwierka
post
Post #15





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

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


kurcze ... wielkie dzięki (IMG:style_emoticons/default/smile.gif) wiedziałam, że to musi być jakiś "błąd w sztuce"...hehe

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.
Rzeczywiście, odwoływałam się do pól nie z tej tabeli .. nazwę zmieniłam, wszystko już super śmiga (IMG:style_emoticons/default/biggrin.gif)

Dzięki serdeczne

Temat można uznać za zamknięty (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 24.08.2025 - 11:28