![]() |
![]() |
![]()
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) |
|
|
![]() |
![]()
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)
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 29 Pomógł: 0 Dołączył: 11.05.2013 Ostrzeżenie: (0%) ![]() ![]() |
jak ja lubię ludzi, którzy mnie rozumieją (IMG:style_emoticons/default/biggrin.gif)
poczułem się w pełni usatysfakcjonowany, jedyne co pozostało mi do szczęścia, to jeszcze jedna.. mała kwestia.. w zasadzie to 2 małe kwestię, które warto tu chyba podpiąć, a jak jest okazja, to chciałbym być jak najbardziej pewny swojej wiedzy. 1. Ten temat spotykany był wiele razy, m.in. zamknięcie wskaźnika zapytania. Według mojego rozumowania, $query->closeCursor(); powinienem umieszczać wszędzie, gdzie zarządzam nie całą liczbą wcześniej pobranych rekordów (np. nie po fetchAll), czy to znaczy, że obejmuję to także polecenia INSERT, UPDATE etc? 2. Czy zapis:
jest najszybszym sposobem sprawdzenia, czy zapytanie z INSERT dodało nowy rekord? ew. myślałem o takim sposobie: ale to chyba jednak, nie jest wcale lepsze rozwiązanie..? Ten post edytował SlimShady 6.07.2013, 23:32:24 |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 362 Pomógł: 44 Dołączył: 10.06.2009 Ostrzeżenie: (0%) ![]() ![]() |
lubię ludzi, którzy rozkminiają Cytat jak ja lubię ludzi, którzy mnie rozumieją (IMG:style_emoticons/default/heart.gif) (wybaczcie - nie mogłem się powstrzymać). A tak co do tematu to chyba lepiej tak:
|
|
|
![]()
Post
#5
|
|
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:
Jeśli chcesz po prostu sprawdzić czy rekord dodał się prawidłowo, to rzeczywiście wystarczy:
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ą. |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 29 Pomógł: 0 Dołączył: 11.05.2013 Ostrzeżenie: (0%) ![]() ![]() |
ale ze mnie nieogarnięta istota.. nie pomyślałem nawet, że zwyczajnie samo wykonanie zwróci mi wartość logiczną, eh dzięki chłopaki (IMG:style_emoticons/default/tongue.gif)
co do closeCursor() - spotkałem się już nie jednokrotnie z zaleceniem jego zastosowania i to nie tylko pod pretekstem "zezwolenia" na kolejne, ale co najciekawsze, natrafiłem również na taką notkę: "w niektórych przypadkach (driver-specific) zwiększa wydajność", oraz głównie, że polepsza to kompatybilność nad innymi systemami baz danych. i bądź tu mądry (IMG:style_emoticons/default/ohno-smiley.gif) ostatecznie - chyba się jednak jego pozbędę (IMG:style_emoticons/default/wink.gif) jeszcze raz dzięki. Ten post edytował SlimShady 6.07.2013, 23:59:01 |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 2 707 Pomógł: 290 Dołączył: 16.12.2008 Skąd: Śląsk Ostrzeżenie: (0%) ![]() ![]() |
Może się podepnę bo o ile różnice pomiędzy $query->fetchAll(), a $query->fetch() dobrze rozumiem to zastanawiam się nad tym, co powinny zwracać w zaawansowanej aplikacji (np. jakiś framework) metody (funkcje) typu getCośTam. Np. funkcja getUsers - czyli metoda modelu użytkowników zwracająca listę użytkowników.
No i teraz pytanie - zawsze zwracam tablicę obiektów bo wydaje mi się to wygodne i logiczne ale nie jest to optymalne właśnie porównując do iteracji po wierszach. Jak to rozwiązujecie? Optymalność vs logika, wygoda? |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 332 Pomógł: 22 Dołączył: 6.07.2010 Ostrzeżenie: (0%) ![]() ![]() |
Witam.
Cytat ostatecznie - chyba się jednak jego pozbędę Już ci mogę powiedzieć że będzie to wielki błąd. Poczytaj jeszcze raz gdzie się tego używa. Sprawdź także na większej ilości zapytań select i będziesz wiedział że faktycznie to błąd. W niektórych przypadkach jest to niezbędne. Ten post edytował ber32 7.07.2013, 16:50:46 |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 29 Pomógł: 0 Dołączył: 11.05.2013 Ostrzeżenie: (0%) ![]() ![]() |
Bardzo dziękuje za wypowiedzenie się, teraz mam takie dziwne odczucie i nie wiem, gdzie powinienem je umieścić w następującym kodzie:
W którym miejscu w powyższym kodzie, mogę 'zaaranżować' closeCursor()? Myślałem o przestrzeni nazwanej (IMG:style_emoticons/default/questionmark.gif) , jednak nie wiem, czy wówczas PHP uwzględni je z przekierowaniem i czy będzie to tam potrzebne, oraz ogólnie rzecz mówiąc, jak to przyzwoicie zorganizować, by miało ręce i nogi? |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 332 Pomógł: 22 Dołączył: 6.07.2010 Ostrzeżenie: (0%) ![]() ![]() |
Widzę, że lektury nie odrobiłeś. Tu przykład z manuala skopiowany, żebyś nie musiał ciężko szukać w taki upał (IMG:style_emoticons/default/oneeyedsmiley02.png)
teraz już chyba wiesz, kiedy go stosować ? |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 29 Pomógł: 0 Dołączył: 11.05.2013 Ostrzeżenie: (0%) ![]() ![]() |
u lala, dziękuje (IMG:style_emoticons/default/biggrin.gif)
Ten post edytował SlimShady 7.07.2013, 17:03:31 |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 332 Pomógł: 22 Dołączył: 6.07.2010 Ostrzeżenie: (0%) ![]() ![]() |
Nie
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 28.09.2025 - 22:52 |