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'];
      }


--------------------
Google knows the answer...
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ó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
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 15:59