Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Pobieranie nazw kolumn o nieznanej ilości
Forum PHP.pl > Forum > Przedszkole
iqique
Witam
Mam taki oto kod pobierający z tabeli nazwy kolumn i wypisujący je na ekranie. Mam następującą prośbę. Kod działa, ale chciałbym żeby mi ktoś wytłumaczył po kolei co się tu dzieje bo chcę to zrozumieć. Drugie pytanie w jaki sposób można skonstruować pętlę foreach tak aby do pobranych w podany niżej sposób nazw kolumn wyświetlić odpowiednie zawartości komórek przypisanych do konkretnego id? Chodzi o to, że ilość kolumn nie będzie stała. Będą dochodzić kolejne. Chcę aby po wykonaniu kodu wyświetliły się nazwy kolumn z tabeli i przypisane im wartości dla konkretnego id.

  1. $resResult = mysql_query( "SELECT * FROM magazyn" );
  2. $arrRow = mysql_fetch_array( $resResult, MYSQL_ASSOC );
  3.  
  4.  
  5. foreach( $arrRow as $strKey => $strValue )
  6. {
  7.  
  8. echo $strKey;
  9.  
  10. }
pmir13

1. Zawartość CAŁEJ tabeli magazyn zapisujesz w zmiennej typu resource $resResult, tam w środku są nie tylko nazwy kolumn, ale też wszystkie rekordy.
2. Pobierasz wiersz z $resResult i tworzysz z niego tablicę $arrRow, w której kolejnym elementom odpowiadają pary nazwa kolumny -> zawartość.
W tabeli tej do zawartości mógłbyś dostać się przez numery kolumn (MYSQL_NUM), nazwy kolumn (MYSQL_ASSOC) lub też na oba sposoby (MYSQL_BOTH, domyślnie). Kolejne wykonania mysql_fetch_array pobrałyby następne rekordy, dopóki coś tam jeszcze w $resResult jest.

5. Dla każdego elementu tablicy $arrRow, przypisując do zmiennych $strKey i $strValue odpowiednio nazwę kolumny i wartość wykonujesz kod między nawiasami, czyli wypisz $strKey.

Ta pętla nie jest konieczna, w zasadzie skoro projektujesz sobie bazę danych to wiesz jakie tam są kolumny i bardziej interesująca jest zawartość.
Pętlą powinno się objąć natomiast wykonywanie mysql_fetch_array, by dostać się do wszystkich rekordów.
sadistic_son
Zmiennej $resResult przypisz wartość z funkcji mysql_query, czyli z zapytania. Następnie zmiennej $arrRow przypisz tablicę asocjacyjną powstałą po wykonaniu funkcji mysql_fetch_array z wyników zwróconych z mysql_query, czyli z $resResult. Tablica asocjacyjna to taka której klucze (indeksy) są stringami, w tym wypadku to nazwy kolumn z tabeli. Potem pętla forach - dla każdej wartości tablicy $arrRow (czyli dla każdego rekordu który zwróciło zapytanie) wyświetl jego klucz - $strKey, czyli nazwę kolumny z tabeli potraktowanej zapytaniem. W pętli dodaj echo $strValue; a wyświetli Ci poszczególne wartości wartości.
iqique
Dziękuję za wyjaśnienie już wszystko rozumiem.Stwierdziłem jednak, że dla mojego przypadku pobieranie całej tablicy jest idiotyzmem więc do poniższej linijki dodałem klauzure where bo i tak potrzebuję konkretny wpis.
  1. $resResult = mysql_query( "SELECT * FROM magazyn where id = 1" );


Dodatkowo mam pytanie. Czy podczas wypisywania nazw kolumn z tabeli w pętli mogę jakoś zaznaczyć rozpoczęcie wypisywania od drugiej kolumny? Pierwszym wpisem jest id i nie chciałbym aby był brany pod uwagę.
matino
Jest kilka sposobów. Najprostszy to dać
  1. if($strKey != 'id')
  2. echo $strKey;
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.