Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP] mysql_fetch_assoc - za mało wyników
dr revuu
post
Post #1





Grupa: Zarejestrowani
Postów: 31
Pomógł: 1
Dołączył: 21.01.2010

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


Witam. Ma zgoła dziwny problem, wydawałoby się łatwy, jednak nie daję rady. Główkowałem, potem google, przeszukałem forum i nie natrafiłem na nic podobnego. Do rzeczy.

  1. $p=mysql_query("SELECT `cos`,`cus` FROM `prefiks_tabela`");
  2. while($p=mysql_fetch_array($p))
  3. {
  4. echo "$p[cos]";
  5. }


No i pół "coś" wychodzi mi za mało, tzn. jedno, a w bazie są dwa. Sprawdzałem w phpmyadmin polecenie do bazy i się zgadza, więc pewnie coś w kodzie sknociłem. Proszę o pomoc.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 9)
Szeszek1992
post
Post #2





Grupa: Zarejestrowani
Postów: 117
Pomógł: 29
Dołączył: 20.05.2009

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


  1. $p=mysql_query("SELECT `cos`,`cus` FROM `prefiks_tabela`");
  2. while($x=mysql_fetch_array($p))
  3. {
  4. echo "$x[cos]";
  5. }

A tak działa?

Ten post edytował Szeszek1992 21.01.2010, 23:54:46
Go to the top of the page
+Quote Post
pedro84
post
Post #3





Grupa: Nieautoryzowani
Postów: 2 249
Pomógł: 305
Dołączył: 2.10.2006

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


Po cholere Ci te "?
Kod
$p=mysql_query("SELECT `cos`,`cus` FROM `prefiks_tabela`");
while($x=mysql_fetch_array($p))
      {
      echo $x['cos'];
      }
Go to the top of the page
+Quote Post
Szeszek1992
post
Post #4





Grupa: Zarejestrowani
Postów: 117
Pomógł: 29
Dołączył: 20.05.2009

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


Cytat(pedro84 @ 21.01.2010, 23:58:48 ) *
Po cholere Ci te "?
Kod
$p=mysql_query("SELECT `cos`,`cus` FROM `prefiks_tabela`");
while($x=mysql_fetch_array($p))
      {
      echo $x['cos'];
      }

Zapytanie to tekst, są cudzysłowia, które można w tym przypadku użyć zamiennie z apostrofami.

Ten post edytował Szeszek1992 22.01.2010, 00:06:32
Go to the top of the page
+Quote Post
dr revuu
post
Post #5





Grupa: Zarejestrowani
Postów: 31
Pomógł: 1
Dołączył: 21.01.2010

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


Wiedziałem, że to coś w tym stylu 0_o.


  1. while($p=mysql_fetch_array($p))


Możecie mi jeszcze wytłumaczyć, dlaczego w tym miejscu nie mogę przypisać do zmiennej poprzedniej wartość zapytania, poszerzoną tutaj o fetch assoc?

Bo ja to rozumiem tak. Moje $p w pierwszym wierszu wykonuje zapytanie do bazy. W while deklaruję zmienną o $p o wartości starej $p, z której można już coś wyciągnąć...

Dlaczego w ogóle zwróciło jeden rekord wcześniej, jeśli nie do końca wszystko było ok?
Go to the top of the page
+Quote Post
Szeszek1992
post
Post #6





Grupa: Zarejestrowani
Postów: 117
Pomógł: 29
Dołączył: 20.05.2009

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


Wyciągało tylko pierwszy rekord z bazy, ponieważ za pierwszym razem mysql_fetch_array() odnosiło się do tego, co zostało pobrane przez mysql_query().
Przy następnym zapętleniu odnosiło się do tego, co otrzymałeś z mysql_fetch_array() przy pierwszym zapętleniu. Nie jest to prawidłowy argument dla tej funkcji(gdyż jest to tablica, a nie "uchwyt"), dlatego też pętla zostaje zakończona(mysql_fetch_array() zwraca błąd). Dlatego też należało użyć zmiennej o innej nazwie.



// Pomógł++
// ayeo
Go to the top of the page
+Quote Post
ayeo
post
Post #7





Grupa: Przyjaciele php.pl
Postów: 1 202
Pomógł: 117
Dołączył: 13.04.2007
Skąd: 127.0.0.1

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


Witam!

  1. while($p=mysql_fetch_array($p))


W pierwszej iteracji Twoje $p zawiera wynik zapytania (dokładniej to zasó(IMG:style_emoticons/default/cool.gif) . Pobierasz z niego jeden wiersz funkcją mysql_fetch_assoc() i jednocześnie przypisujesz ten wiersz do $p. Czyli w następnej iteracji już nie ma co pobrać bo $p nie zawiera wyniku zapytania tylko pierwszy wiersz. Dziwne, że nie generuje to błędu bo funkcja mysql_fetch_assoc() dostaje niepoprawny parametr (wymaga zasobu, a dostaje tablicę).


Pozdrawiam!
Go to the top of the page
+Quote Post
Szeszek1992
post
Post #8





Grupa: Zarejestrowani
Postów: 117
Pomógł: 29
Dołączył: 20.05.2009

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


Nie zostaje wyświetlony żaden błąd, gdyż mysql_fetch_array() zostało umieszczone w while(), gdzie występuje coś w rodzaju funkcji warunkowej. Mysql_fetch_array() w przypadku sukcesu zwraca prawdę(tablicę z wynikami), w przypadku błędu lub zakończenia zasobów - false. Gdyby było to umieszczone normalnie w kodzie(poza while()), zostałby wyświetlony błąd.

Pozdrawiam,
Szeszek1992
Go to the top of the page
+Quote Post
ayeo
post
Post #9





Grupa: Przyjaciele php.pl
Postów: 1 202
Pomógł: 117
Dołączył: 13.04.2007
Skąd: 127.0.0.1

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


Witam!

Niestety nie masz racji, ja zresztą też. Dostarczenie niepoprawnego parametru do mysql_fetch_assoc() nie wygeneruje błędu tylko ostrzeżenie - bez znaczenia czy to w pętli while czy bezpośrednio w kodzie.

Pozdrawiam!
Go to the top of the page
+Quote Post
Szeszek1992
post
Post #10





Grupa: Zarejestrowani
Postów: 117
Pomógł: 29
Dołączył: 20.05.2009

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


Ale przy "odpowiedniej", a w większości przypadków standardowej konfiguracji PHP warningi nie są wyświetlane(http://php.net/manual/en/function.error-reporting.php), stąd też w większości przypadków(jak i najprawdopodobniej w tym) Warning nie został wyświetlony.
Przepraszam za to niedopatrzenie.

Pozdrawiam,
Szeszek1992

PS. Na wszelki wypadek sprawdziłem w praktyce, jest tylko warning.

Ten post edytował Szeszek1992 22.01.2010, 01:15:46
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 - 07:56