![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 98 Pomógł: 1 Dołączył: 28.06.2009 Skąd: Great Britan Ostrzeżenie: (0%) ![]() ![]() |
Siemanko mam takie pytanie: Czy to jest poprawne? w sensie takim czy tak się używa.
Jak najlepiej robić zapytania i je wysyłać, bo jak tak sobie robie:
to się trochę syf robi, jak dbacie o to by wasz kod był przejżysty przy powtarzających się rzeczach? podzielcie się (IMG:style_emoticons/default/smile.gif) |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 2 958 Pomógł: 574 Dołączył: 23.09.2008 Skąd: wiesz, że tu jestem? Ostrzeżenie: (0%) ![]() ![]() |
1. Jeżeli pobierasz dane tylko po to aby zliczyć wiersze to używaj COUNT() zamiast mysql_num_rows()
2.
3. Tego typu rzeczy robi się za pomocą funkcji aby jak to już sam zauważyłeś nie brudzić kodu.
A w ogóle było by cudownie gdybyś przerzucił się na PDO. Ten post edytował CuteOne 31.01.2012, 05:25:31 |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 1 527 Pomógł: 438 Dołączył: 28.06.2011 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Ad. 2
Dla bardziej skomplikowanych (tak naprawdę po prostu dłuższych) zapytań osobiście polecam wyrzucenie zapytania poza ciało funkcji tak jak zaproponował autor:
Dla dłuższych zapytań niezależnie od tego czy uzywa się funkcji z rodziny mysql_* czy PDO czy czegokolwiek innego (może poza ORM) to dobry zwyczaj bo kod staje się o wiele czytelniejszy a poprawne podzielenie zapytania na linie może jedynie pomóc w jego zrozumieniu przez osoby trzecie, które kiedyś mogą na dany kod zerknąć... I teraz odnosząc się do tego co napisał mój przedmówca - weź sobie do serca tą radę z PDO Autorze - to raz a dwa: mysql_num_rows() jak i jego odpowiednik w PDO czyli pdostatement::rowCount() służą owszem do pobrania liczby rekordów i można z nich korzystać ale tylko gdy pobierasz rekordy w celu ich wyświetlenia (wszystkich) a dodatkowo potrzebujesz znać ich liczbę... Tak jak napisał przedmówca jeśli potrzebujesz z bazy jedynie liczby rekordów spełniającej dane kryteria bardzo mile widziane jest COUNT() (IMG:style_emoticons/default/wink.gif) Ten post edytował Sephirus 31.01.2012, 08:52:24 |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 98 Pomógł: 1 Dołączył: 28.06.2009 Skąd: Great Britan Ostrzeżenie: (0%) ![]() ![]() |
Wziąć, wziąłem sobie do serca, bo od rana siedzę przy PDO, tyle że już jestem w pierwszym rowie..
mianowicie wcześniej mogłem wysyłać zapytania "globalnie", teraz nie widzę PDO w innych funkcjach, szukałem coś i znalazłem singleton, ale dużo osób to krytykuje.. więc jak? w każdej funkcji mam tworzyć nowe PDO?
like that? Ten post edytował Koldy 31.01.2012, 11:25:59 |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 1 527 Pomógł: 438 Dołączył: 28.06.2011 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Hmm kto krytykuje singleton?? O_o
Zrób singleton - zwracający obiekt PDO już połączony i po krzyku... Nie wiem w czym problem
I tam gdzie potrzebujesz dajesz np:
Ten post edytował Sephirus 31.01.2012, 11:38:57 |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 98 Pomógł: 1 Dołączył: 28.06.2009 Skąd: Great Britan Ostrzeżenie: (0%) ![]() ![]() |
Czytałem kilka opini gdzie narzekali na Singleton, że się nie da na kilku bazach pracować itp.
Pewnie teraz mnie rozniesiecie, ale:
Czy zamiast tego mógłbym zrobić:
i to nie było by to samo? |
|
|
![]()
Post
#7
|
|
Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
Czytałem kilka opini gdzie narzekali na Singleton, że się nie da na kilku bazach pracować itp. E tam dupa. Moim zdaniem singleton jest czasem dobrym wyjściem, a co do połączenia singletona i kilku baz danych to Kohana 2 obsługuje właśnie taki mechanizm, więc jak widać da się. |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 1 527 Pomógł: 438 Dołączył: 28.06.2011 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Nikt Cię nie rozniesie (IMG:style_emoticons/default/smile.gif)
Ale oczywiście to jest zły pomysł w dokładnie takiej formie... dlaczego? Bo każdorazowo łączy się z bazą... Singleton jest powszechnie używany i sprawdzony (IMG:style_emoticons/default/smile.gif) Co prawda można przerobić tą funkcję tak by to miało sens - ale nie ma co odkładać na bok sprawdzonych wzorców ;/ A dla tych co mają problem z obsługą wielu różnych połączeń do bazy i singletonem - mam dwa słowa - "fabryka singletonów" (IMG:style_emoticons/default/tongue.gif) - dziękuję (IMG:style_emoticons/default/smile.gif) Zresztą wydaje mi się że każdy prosty DBAL jest zbudowany wstępnie w oparciu o singleton (IMG:style_emoticons/default/smile.gif) Przykład pseudo fabryki singletonów do obsługi bazy danych:
EDIT: oczywiście przedstawiłem sam koncept bez obsługi wyjątków i sprawdzania błędów (IMG:style_emoticons/default/smile.gif) Ten post edytował Sephirus 31.01.2012, 12:33:22 |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 2 958 Pomógł: 574 Dołączył: 23.09.2008 Skąd: wiesz, że tu jestem? Ostrzeżenie: (0%) ![]() ![]() |
Sephirus: nie zgodzę się z Tobą w kwestii wstępnego zapisu zapytania do zmiennej. Jaki to ma sens?
? Koldy: zastanów się czym jest singleton i kiedy się go wykorzystuje a dojdziesz do prostego wniosku, że jest idealny do obsługi bazy danych (IMG:style_emoticons/default/smile.gif) ps. również Zend wykorzystuje singleton do obsługi bazy danych (IMG:style_emoticons/default/wink.gif) |
|
|
![]()
Post
#10
|
|
Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Cytat : nie zgodzę się z Tobą w kwestii wstępnego zapisu zapytania do zmiennej. Jaki to ma sens? Ano choćby taki, że możesz zrobic echo $query; i sobie sprawdzić co masz nie tak w zapytaniu gdy pluje ci błędem.
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 24.08.2025 - 01:22 |