Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] mysql_fetch_assoc - za mało wyników
Forum PHP.pl > Forum > Przedszkole
dr revuu
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.
Szeszek1992
  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?
pedro84
Po cholere Ci te "?
Kod
$p=mysql_query("SELECT `cos`,`cus` FROM `prefiks_tabela`");
while($x=mysql_fetch_array($p))
      {
      echo $x['cos'];
      }
Szeszek1992
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.
dr revuu
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?
Szeszek1992
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
ayeo
Witam!

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


W pierwszej iteracji Twoje $p zawiera wynik zapytania (dokładniej to zasó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!
Szeszek1992
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
ayeo
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!
Szeszek1992
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.
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-2025 Invision Power Services, Inc.