Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP]Klasa DB
Koldy
post
Post #1





Grupa: Zarejestrowani
Postów: 98
Pomógł: 1
Dołączył: 28.06.2009
Skąd: Great Britan

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


Czesc wszystkim,
jestem w trakcie budowanie klasy Database no i zbudowalem juz klase do budowania zapytan, dzieki czemu wartosci sa przyjmowane typu:
  1. protected function _getMenuItems($id=0) {
  2. DB::Select()->Column(NULL, '*');
  3. DB::Select()->From('pages');
  4. DB::Select()->Where('page_parent_id', '=', $id);
  5. DB::Select()->Where('page_is_adm', '=', 0);
  6. DB::Select()->OrderBy('page_order', ' = 0');
  7. DB::Select()->OrderBy('page_order');
  8. if (DB::Run())
  9. return DB::getResults(DB::RET_FETCHALL);
  10. }


I tak dochodze do wniosku po tym wszysktim czy gra jest warta swieczki, chodzi o to ze sam juz nie wiem czy nie bylo by lepiej wklepac to jako SQL i poprostu zbudowac mala klase do przechwytywania sql oraz bindowanych wartosci, jedyne plusy chyba jakie sa z mojego skryptu to prostota debugowania i czytelnosc wprowadzania danych, ale tak sie zastanawialem ze czyste SQL w postaci tekstu bylyby o niebo szybsze, czyz nie?

Mozecie mi doradzic czy warto taka klase budowac, czy lepiej dac sobie z tym spokoj?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Crozin
post
Post #2





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


1. Faktycznie, moje niedopatrzenie. Może i metody DB::select() zwracają już obiekt, ale:
1.1. Wykorzystanie Singletona jest tutaj, jak w niemal każdym przypadku, złym rozwiązaniem, które tworzy jedynie masę problemów - nie zbudujesz sobie przykładowo dwóch zapytań równocześnie.
1.2. Powinieneś pracować na obiekcie klasy DB, który to może zwracać kolejne obiekty, a nie na klasach.

Jak już to powinieneś skończyć mniej-więcej z czymś takim:
  1. $queryBuilderA = $db->createSelectBuilder();
  2. $queryBuilderB = $db->createUpdateBuilder('page');
  3.  
  4. $queryA = $queryBuilderA->select('*')->from('page')->where(...)->where(...)->orderBy(...)->orderBy(...)->getQuery(); // korzystanie z method chainingu jest oczywiście opcjonalne
  5. $queryB = $queryBuilderB->set(...)->where(...);
  6.  
  7. $db->run($queryB);
  8. $result = $db->run($queryA);


@mmmmmmm: ORDER BY col_name = 0, col_name jest w pełni poprawne i ma konkretny cel (rekordy posortowane rosnąco, ale te o wartości równej zero na samym końcu). col_name = 0 to przecież nic innego jak wyrażenie.

Ten post edytował Crozin 1.08.2014, 07:52:32
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: 15.10.2025 - 10:47