Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] PDO wprawiające w zakłopotanie
SlimShady
post
Post #1





Grupa: Zarejestrowani
Postów: 29
Pomógł: 0
Dołączył: 11.05.2013

Ostrzeżenie: (0%)
-----


Hej Wam,

od jakiegoś czasu, swoje skrypty opieram o bibliotekę PDO. Bardzo ją lubię, tworzenie przy niej kodu sprawia mi większą przyjemność niż korzystanie z klasycznego mysql_*. Jednak z powodu dość rzadkiego opisu posługiwania się nią, jest wiele kwestii, które budzą u mnie niepewność i zaciekawienie. Wiem, że są takie rzeczy jak manual, osobiście sam jestem wielkim zwolennikiem kopania danego hasła w google, aczkolwiek tym razem nie mogę nakierować się na odpowiednią ścieżkę.

Tak więc, ciekawią mnie 2 rzeczy:
1. Kiedy mam wykorzystać $query->fetchAll(), zamiast normalnego $query->fetch(). Z tego co mój mózg wnioskuję, jeśli chcę przypisać sobie do zmiennej wszystkie wyniki pewnego zapytania, wtedy korzystam z fetchAll i mam do dyspozycji wszelkie pobrane rekordy, w jednym zasobniku - czy na pewno?

2. Do czego jest tryb zwracania wyników PDO::FETCH_OBJ? Wiem o nim tyle, że przedstawienie wyników, odbywa się w postaci anonimowego obiektu, o własnościach nazw pól. Ale w jakiej konkretnie sytuacji może on się okazać przydatny? Oraz, czy zdefiniowanie samego PDO::FETCH_ASSOC lub PDO::FETCH_NUM, zwracającego tablicę indeksowaną asocjacyjnie/numerycznie, jest wydajniejsze/szybsze niż to i to łączne (PDO::FETCH_BOTH)?
I jeśli zapiszę $query->fetchObject() oraz $query->fetch(PDO::FETCH_OBJ) da mi to identyczny efekt?

Pozdrawiam (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
SmokAnalog
post
Post #2





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

Ostrzeżenie: (0%)
-----


Fajne pytania, lubię ludzi, którzy rozkminiają (IMG:style_emoticons/default/smile.gif)
  1. Tak jak zauważyłeś, fetchAll zapisuje wszystkie wyniki do tablicy. Przydaje się to wtedy, kiedy... chcesz wszystkie wyniki w tablicy (IMG:style_emoticons/default/smile.gif) Jak iterujesz wiele rekordów, to raczej rzadko chcesz zapisać wszystko w tablicy, a fetch() oszczędza pamięć jadąc wiersz po wierszu. Przykłady kiedy mógłbyś użyć fetchAll()? Może np. wykonujesz jakieś zapytanie i wyświetlasz dane w kilku miejscach różnie posortowane - zamiast osobnych zapytań do bazy możesz wtedy bawić się tablicą z danymi. Oprócz tego wszelkie wypluwanie danych, np. do formatu JSON - przekazujesz całą tablicę do funkcji formatującej. Przykładów może być bardzo wiele.
  2. To już jest głównie kwestia preferencji. Osobiście wolę pracować z tablicą asocjacyjną niż z obiektem, chociaż odczyt danych odbywa się w dość podobny sposób. W obu możesz odwoływać się do określonego pola po nazwie. Tablicę możesz dodatkowo sortować, a obiektu nie. FETCH_NUM jest prawdopodobnie nieco bardziej wydajne niż FETCH_ASSOC, ale są to różnice kompletnie niewarte świeczki. Ja używam tylko FETCH_ASSOC, bo nie widzę sensu w odwoływaniu się do kolumn po indeksach. FETCH_BOTH tworzy większą tablicę z wynikami - nigdy tego nie używam (choć nie z tego powodu). Co do fetchObject to tak, daje to identyczny efekt jak FETCH_OBJ, co jest wyraźnie zaznaczone w oficjalnej dokumentacji.
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 12.10.2025 - 07:13