![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 9 Pomógł: 0 Dołączył: 21.02.2010 Ostrzeżenie: (0%) ![]() ![]() |
Witam, raczkuję w PHP, więc szukam pomocy i tłumaczenia tutaj
![]() Proszę raczej unikać zbyt fachowego nazewnictwa, bo po prostu mogę nie zrozumieć ![]() Ostatnimi czasy męczę się, żeby pobrać wyniki z bazy MySQL (3 pola, id, nick, mail) i sprawdzić, czy nie ma gdzieś pozycji o nicku np. "Nick". Po pobraniu całej tabeli (* from tabela) zatrzymuję się, bo nie wiem jak to ogarnąć. Która tablica jest najlepsza, na tego typu dane? fetch_array, row czy assoc? Jak właściwie działa asocjacyjna? (proszę na chłopski rozum, i wujek google i wiki posiada raczej trudne nazewnictwo i nie podają struktury budowy). Z tym rodzi się kolejny problem. Jeśli już pobiorę tablicę z bazy, jak przejrzeć kolejne wyniki, lecąc od ID 1, do ID (np.) 20? Z tego, co tłumaczył mi mój nauczyciel, wybrać pole można przez nazwa_tabeli[0], [1], lub [2], w moim przypadku, bo assoc podobno zwraca tablicę numeryczną. Jak w takim przypadku pobrać z pola nazwa_tabeli[0] wynik dla nicka o ID 2? Dziękuję z góry za pomoc. Proszę mnie tutaj nie karcić, bo to zniechęca ![]() |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 77 Pomógł: 6 Dołączył: 9.08.2008 Ostrzeżenie: (0%) ![]() ![]() |
Ale nie wyciąga się wszystkiego z bazy a potem za pomocą php "okraja" do tego co potrzebne czy wyciąga potrzebne dane.
Jak tworzysz pytanie to odpytujesz o to co chcesz np id nick czy jak ci potrzebne wszystko to * ale dajesz jakieś ograniczenie poprzez WHERE np nick=`janek` (czy też bardziej rozbudowane). W zależności od tego co ci jest potrzebne tak konstruujesz pytanie. |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 1 429 Pomógł: 195 Dołączył: 6.10.2008 Skąd: Kraków/Tomaszów Lubelski Ostrzeżenie: (0%) ![]() ![]() |
milej analizy -------------------- O! Zimniok :P
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 9 Pomógł: 0 Dołączył: 21.02.2010 Ostrzeżenie: (0%) ![]() ![]() |
Aaa, rozumiem.
Czyli nie przelatuję całej bazy z góry na dół, tylko przy pomocy WHERE sprawdzam, czy jest taka opcja? Jeśli już wyciągnę dane, czy użytkownik "nick" istnieje, to jak wyciągnąć resztę jego danych, id, mail? Jak wyszukam z WHERE, to wyciągnie mi wszystkie pola? @MateuszScirka, dzięki wielkie, schemacik naprawdę się przyda. A mógłbyś mi mniej więcej wytłumaczyć, zobrazować, działanie poszczególnych fetchów? |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 77 Pomógł: 6 Dołączył: 9.08.2008 Ostrzeżenie: (0%) ![]() ![]() |
nie sprawdzasz czy jest taki nick a potem odpytujesz ponownie tylko od razy odpytujesz o to co chcesz bo jak nie ma tego czego będziesz szykał przy odpowiednim zapytaniu będziesz o tym wiedział a jak jest to co szukasz to już ci wyciągnie (im mniej zapytań tym lepiej chyba to się zwie optymalizacja)
|
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 1 429 Pomógł: 195 Dołączył: 6.10.2008 Skąd: Kraków/Tomaszów Lubelski Ostrzeżenie: (0%) ![]() ![]() |
(mysql_fetch_assoc)
1 fetch w while zapisuje wiersz (rekord) wyniku w tablicy asocjacyjnej, ale że jest w while, to zapisze jeden -> wyswietla, potem zapisuje kolejny -> wyswietla i tak dalej, aż wyświetli wszystkie (bo dałem echo-wyświetlanie) 2 fetch ten samotny, nie w pętli while zapisuje tylko jeden wiersz (rekord) do tabeli asocjacyjnej, (odwołanie poprzez wpisanie nazwy pola miedzy te fajne nawiasy prostokątne np. $wynik["id"] (mysql_fetch_row) 3 fetch zapisuje rekord do tablicy wyliczeniowej i działa podobnie jak mysql_fetch_assoc tyle że odwołujemy się do pól tabeli za pomocą $wynik[0] (u ciebie to id), $wynik[2], $wynik[3] itd.. Natomiast funkcja mysql_num_rows służy do policzenia ilości rekordów pobranych przez zapytanie, Przy pomocy WHERE precyzujesz o jaki wynik Ci chodzi, co chcesz pobrać z bazy, jeżeli chcesz pobrać np. wyniki w których `pole`=1 (załóżmy że jest takich 3) to piszemy ...WHERE `pole`=1 i potem zapisujemy do tabicy. Przeważnie jeżeli jest nieokreślona ilość rekordów (2, 5, 4444, 666) to korzystamy do wyświetlania i innych operacji z while, jeżeli natomiast wiesz, że będzie tylko jeden rekord, to nie musisz korzystać z while tylko od razu zapisać do tablicy... Myślę że napisałem baaardzo prosto i zrozumiale, w razie wątpliwości powpisuj nazwy funkcji w Googlach lub zajrzyj do manuala. Pozdro -------------------- O! Zimniok :P
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 9 Pomógł: 0 Dołączył: 21.02.2010 Ostrzeżenie: (0%) ![]() ![]() |
Bardzo jasno, dziękuję uprzejmie
![]() Ostatnie pytanie. Nauczyciel mówił mi, że możliwe jest użycie opcji jak w C, albo Pascalu, nie pamiętam, jeśli chodzi o tablice dwuwymiarowe - nazwa_tablicy[0][0]. Da się tak zrobić w PHP? |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 1 429 Pomógł: 195 Dołączył: 6.10.2008 Skąd: Kraków/Tomaszów Lubelski Ostrzeżenie: (0%) ![]() ![]() |
Pewnie że się da, nawet więcej.
Dużo o tym na GOOGLE Ten post edytował MateuszScirka 7.03.2010, 00:33:14 -------------------- O! Zimniok :P
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 9 Pomógł: 0 Dołączył: 21.02.2010 Ostrzeżenie: (0%) ![]() ![]() |
Ok, poczytam, dziękuję bardzo za pomoc.
Jednak Was jeszcze pomęczę ^^`
Zawartość tabeli: id - nick - mail 1 - nick1 - nick1@ 2 - nick2 - nick1@ 3 - nick3 - nick1@ 4 - nick4 - nick1@ ///edit Problem rozwiązała zmiana z assoc na row, dlaczego? Ten post edytował Szprajcik 7.03.2010, 00:59:49 |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 181 Pomógł: 14 Dołączył: 4.06.2008 Ostrzeżenie: (0%) ![]() ![]() |
Sprawdź sobie to:
Plik zapisz jako test.php:
Ten post edytował kuzdo 7.03.2010, 01:00:42 |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 9 Pomógł: 0 Dołączył: 21.02.2010 Ostrzeżenie: (0%) ![]() ![]() |
kuzdo, problem rozwiązał się przy zamianie assoc na row. Dlaczego?
|
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 181 Pomógł: 14 Dołączył: 4.06.2008 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 9 Pomógł: 0 Dołączył: 21.02.2010 Ostrzeżenie: (0%) ![]() ![]() |
Cytat Parse error: syntax error, unexpected '"' in /home/gsmfilmp/public_html/inne/fd/bukiet/bukiet.php Nie wiem do dzisiaj jak wygląda sprawa ' i " w takich poleceniach ^^` |
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 181 Pomógł: 14 Dołączył: 4.06.2008 Ostrzeżenie: (0%) ![]() ![]() |
Jeżeli cały ciąg dajesz w " " to w środku musisz dać albo ' ' albo \" \". I na odwrót...
Nazwy kolumn w tabeli bez ' ', a same nazwy tabeli możesz też pisać bez ' '. Czyli tak:
lub
Drugi sposób jest o tyle lepszy, że php nie musi zamieniać zmiennych $n i $m na ich wartości i wklejać do całego polecenia, tylko łączy fragmenty poleceń kropkami... Ale ja częściej stosuję pierwszy sposób, bo jest bardziej czytelny (dopatrywanie się jakie tam są cudzysłowy wpisane obok siebie jest masakryczne...) chyba, że konkretny przypadek będzie lepiej załatwić tym drugim sposobem ;P Ten post edytował kuzdo 7.03.2010, 01:36:26 |
|
|
![]()
Post
#15
|
|
Grupa: Zarejestrowani Postów: 9 Pomógł: 0 Dołączył: 21.02.2010 Ostrzeżenie: (0%) ![]() ![]() |
O, super, działa ładnie.
Wtedy dodawało mi do bazy zmienne $n i $m ^^` |
|
|
![]()
Post
#16
|
|
Grupa: Zarejestrowani Postów: 181 Pomógł: 14 Dołączył: 4.06.2008 Ostrzeżenie: (0%) ![]() ![]() |
BTW. czy id jest auto_increment? Jeśli tak, to możesz pominąć z zapytania i będzie samo się zwiększało... Chyba, że to coś innego...
Dodatkowo odpowiadając na Twoje pytanie "Która tablica jest najlepsza, na tego typu dane? fetch_array, row czy assoc?" To zależy... Jeżeli chcesz mieć wszystko czytelnie rozpisane, to możesz stosować fetch_assoc, ale wtedy musisz wszystkie zmienne podpisywać nazwami kolumn z bazy... $zmienna['id'], $zmienna['nick'], $zmienna['mail'] Jeżeli nie chcesz bawić się w konkretne nazwy, to możesz korzystać z fetch_row, wtedy zmienne są numerowane $zmienna[0], $zmienna[1], $zmienna[2] A tablica fetch_array to połączenie tych dwóch... Możesz korzystać albo z nazw, albo z numerków np. $zmienna[0], $zmienna['nick'], $zmienna[2] Teraz już powinieneś wiedzieć co to jest tablica asocjacyjna... |
|
|
![]()
Post
#17
|
|
Grupa: Zarejestrowani Postów: 9 Pomógł: 0 Dołączył: 21.02.2010 Ostrzeżenie: (0%) ![]() ![]() |
tak, mam auto_increment
![]() Dziękuję Ci uprzejmie. Teraz rozumiem i na razie sobie radzę ![]() Jakbym miał jakieś problemy lub czegoś nie wiedział, napiszę. edit ![]()
Znów sprawa " i ', przekleństwo! Cytat Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING
Ten post edytował Szprajcik 7.03.2010, 01:43:43 |
|
|
![]()
Post
#18
|
|
Grupa: Zarejestrowani Postów: 124 Pomógł: 1 Dołączył: 13.07.2009 Ostrzeżenie: (0%) ![]() ![]() |
Polecam Ci do tego jakiś notatnik kolorujący składnię - łatwiej zauważyć, gdzie masz błąd. Ten post edytował Walian 7.03.2010, 01:54:51 |
|
|
![]()
Post
#19
|
|
Grupa: Zarejestrowani Postów: 181 Pomógł: 14 Dołączył: 4.06.2008 Ostrzeżenie: (0%) ![]() ![]() |
Polecam Notepad++ bardzo ładnie koloruje składnię i ma wiele przydatnych funkcji, w tym pisanie w kilku liniach na raz, czy edycja kilku plików na raz...
Co do Twojego problemu... Zaczynając pisać zapytanie zaczynasz od czegoś takiego:
Wpisując kolejne polecenia wychodzi np. takie coś:
Jak widzisz całe zapytanie jest objęte cudzysłowami " ", więc jeśli wystąpi w środku zapytania cudzysłów to kończy się jedna część zapytania. W tym przykładzie wszystkie zmienne umieszczane są w apostrofach, więc i zmienna w WHERE też powinna być umieszczona w apostrofach, czyli:
Umieszczając tam jakąś zmienną, możesz wpisać ją bezpośrednio, ponieważ zmienne w cudzysłowach "$zmienna" są zastępowane przez ich wartości. A całe zapytanie SQL jest umieszczone właśnie w cudzysłowach... Możesz także umieścić zmienną osobno łącząc ją z resztą zapytania, wtedy stosujesz kropkę... Więc są dwie możliwości: Bezpośrednio:
Z operatorem łączenia (.):
Jak widzisz, w przypadku dodawania zmiennej przez kropkę, musisz zakończyć pierwszy ciąg, ale żeby $zmienna była dodana w apostrofach, musisz jeden umieścić przed zakończeniem ciągu, czyli piszesz `id` = `" (najpierw apostrof, żeby $zmienna była umieszczona w apostrofach, później cudzysłów, żeby zamknąć ciąg który zaczyna się od "SELECT), później wstawiasz zmienną przez operator łączenia czyli `id` = `".$zmienna i na koniec musisz dopisać jeszcze jeden ciąg, żeby zapytanie było kompletne. W tym drugim ciągu musi znaleźć się tylko apostrof który otacza zmienną chyba, że chcesz więcej parametrów to dopisujesz coś jeszcze... Czyli: `id` = `".$zmienna."`" Jak widzisz na końcu jest kropka, cudzysłów, apostrof i jeszcze raz cudzysłów. Kropka dodaje to co jest za nią do tego co jest przed nią, pierwszy cudzysłów otwiera ciąg, apostrof będzie interpretowany dosłownie, więc to on zostanie wklejony do całego zapytania i drugi cudzysłów zamykający ciąg. Całość otaczasz nawiasami a na końcu dajesz średnik:
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 26.04.2025 - 03:26 |