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%)
-----


(IMG:style_emoticons/default/zakochany.gif)

Mackos, Twój zapis to PHP-owe masło maślane. Wystarczy:
  1. return $pdo->execute();


Jeśli chcesz po prostu sprawdzić czy rekord dodał się prawidłowo, to rzeczywiście wystarczy:
  1. if($query->execute()) {
  2. // udało się dodać do bazy
  3. }


Jeśli dodatkowo chcesz wiedzieć ile dokładnie dodało się rekordów, to rowCount() jest dobrym pomysłem.

Co do kursora, nie do końca rozumiem pytanie. Dokumentacja szczegółowo wyjaśnia działanie closeCursor() - ja tego nigdy nie używałem, a do tej pory nawet nie znałem. Z tego co zrozumiałem, to to się przydaje tylko wtedy, kiedy chcesz kilkukrotnie przeiterować wyniki zapytania, kiedy nie iterujesz całego zestawu wyników. Czyli np. zapytanie zwraca 10 wierszy, a Ty iterujesz w pierwszej porcji 5, w następnej 7, potem 2 itd. Co więcej, dokumentacja twierdzi, że resetowanie kursora to jest domyślne zachowanie wielu systemów baz danych, czyli w nich execute() samo resetuje kursor. Nie zawracałbym sobie głowy tym closeCursor(). A już na pewno nieprzy INSERT i UPDATE - tych zapytań nawet się nie iteruje, prawda? One się po prostu wykonują.
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: 16.10.2025 - 13:07