![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 342 Pomógł: 15 Dołączył: 30.08.2011 Ostrzeżenie: (0%) ![]() ![]() |
Mam kilka wątpliwości i za nic nie mogę ich rozgryźć, manual niestety też nie pomógł zbytnio.
Chodzi o metody Fetch oraz FetchAll. Mianowicie kiedy się wykorzystuje którą? mam taki przykład. Zwraca wszystkie Loginy z kolumny Login.
Jaka jest różnica pomiędzy tym ? oraz dlaczego pętla foreach pokazuje wyniki bez podania jej metody pobierania?
a Np tutaj wyrzuci błąd?
Jak dla mnie to dane można wyciągnąć każdą metodą. Jedynie co zauważyłem to Fetch zwraca wyniki w formie tablicy asocjacyjnej(FETCH_ASSOC) jednowymiarowej a FetchAll w formie dwuwymiarowej. I jeszcze jedn pytanie, pisząc kiedyś Cmsa prostego sprawdzałem czy w bazie istnieje taki wynik po przez a jak to by wyglądało przy fetchAll ? Ten post edytował Boshi 12.02.2015, 19:45:01 |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 6 806 Pomógł: 1828 Dołączył: 11.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
fetch pobiera i zwraca jeden rekord, fetchAll pobiera i zwraca wszystkie rekordy.
-------------------- |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 342 Pomógł: 15 Dołączył: 30.08.2011 Ostrzeżenie: (0%) ![]() ![]() |
Tak to wiem, ale jak to się ma do ww. przykładów i pytań? Kiedy jedno a kiedy drugie używać? jakaś różnica pomiędzy nimi w praktyce?
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 6 806 Pomógł: 1828 Dołączył: 11.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
Jeśli potrzebujesz pobrać jeden rekord, to używasz fetch, jeśli wszystkie to fetchAll, przecież nie odwrotnie.
Np. pobierając dane użytkownika używasz fetch, jeśli chcesz wyświetlić wszystkich użytkowników, to fetchAll. -------------------- |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
Fetch możesz stosować jedynie w pętli while()
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 342 Pomógł: 15 Dołączył: 30.08.2011 Ostrzeżenie: (0%) ![]() ![]() |
Jeśli potrzebujesz pobrać jeden rekord, to używasz fetch, jeśli wszystkie to fetchAll, przecież nie odwrotnie. Np. pobierając dane użytkownika używasz fetch, jeśli chcesz wyświetlić wszystkich użytkowników, to fetchAll. Tak to oczywiście zrozumiałem, ale jeżeli chcę pobrać wszystkie rekordy to przecież równie dobrze mogę użyć fetch w pęli np while tak jak Pyton napisał Różnica taka, że fetch pobiera pojedyńczo każdy rekord i przetwarza w pętli. A FetchAll pobiera wszystko do tablicy asocjacyjnej i rónież przetwarza ową tablicę. Jedynym logiczny argumentem była by chyba wydajność tutaj. Fetch możesz stosować jedynie w pętli while() No tak, ale dlaczego foreach nie pozwala użyć fetch? |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
Ponieważ Fetch zwraca wiersz z wyniku a następnie przesuwa kursor o pozycję dalej.
Dla foreach ilość rekordów z wyniku fetch to 1. while natomiast nie sprawdza ile jest danych tylko czy zwracane jest cokolwiek co nie jest logicznym false (np 0, pusty string, false, null) |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 342 Pomógł: 15 Dołączył: 30.08.2011 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
Przecież powyżej dajesz pobranie z fetch :|
|
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 342 Pomógł: 15 Dołączył: 30.08.2011 Ostrzeżenie: (0%) ![]() ![]() |
Gdzie? ten ostatni przykład jest osobnym. Nigdzie nie pokazuje PHP jak ma pobierać rekord?
też normalnie pobiera i wyświetla? tak jak by po obiekcie przeleciał.. |
|
|
![]()
Post
#11
|
|
![]() Grupa: Zarejestrowani Postów: 3 034 Pomógł: 366 Dołączył: 24.05.2012 Ostrzeżenie: (0%) ![]() ![]() |
http://php.net/manual/en/pdo.query.php manuala poczytać wystarczyło
|
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 342 Pomógł: 15 Dołączył: 30.08.2011 Ostrzeżenie: (0%) ![]() ![]() |
Czyli po prostu trzeba uznać, że PDO daje taką możliwość i już ? Tak wynika z manuala przynajmniej.
Wychodzi, na to, że niby każda metoda służy do czegoś innego a i tak wszystkie można sprowadzić do jednej wymaganej czynności. Jeżeli chcę wypisać wszystko po prostu użyję pętli foreach bez FetchAll, bądź fetch z while bądź fetchall z foreach... ten sam wynik. jeżeli będę chciał sprawdzić czy coś istnieje w bazie to mogę użyć fetch lub normalnej pętli foreach + if + break, ale to nie optymalne. Jeżeli będę chciał pobrać całą tablicę i na niej coś operowac mogę użyć zwykłej pętli foreach i wpisać dane do tablicy lub użyć gotowej FetchAll Jeżeli się mylę, to niech ktoś jeszce mnie z błędu wyprowadzi ![]() |
|
|
![]()
Post
#13
|
|
![]() Grupa: Zarejestrowani Postów: 3 034 Pomógł: 366 Dołączył: 24.05.2012 Ostrzeżenie: (0%) ![]() ![]() |
no dodali dla ułatwienia, bo po query przeważnie itak robiłeś własnie fetch, a to że da się to wszytko sprowadzić do tego samego to logiczne ale kwestia tego czego potrzebujesz to wtedy tego użyjesz
|
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 342 Pomógł: 15 Dołączył: 30.08.2011 Ostrzeżenie: (0%) ![]() ![]() |
Dzięki
![]() |
|
|
![]() ![]() |
![]() |
Aktualny czas: 19.08.2025 - 16:55 |