Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Klasa obsługi MYSQL 5
Forum PHP.pl > Forum > Gotowe rozwiązania > Algorytmy, klasy, funkcje
gam3r
Witam,
ostatnio czytałem ksiazke PHP5.zaawansowane programowanie, tam autorzy stworzyli prostą klase do obsługi DB, ostatnio tez zobaczyłem gotową klasę Flipaja i to zachęciło mnie do stworzenie czegoś takiego własnymi palcami;). Proszę o sugestie co zmienić, żeby np. poprawić wydajność, co jest dobre, co złe, oraz ew. jak dany probelm rozwiązać. Dosyć sporo jest komentarzy w pliku więc nie bede tutaj opisywac sposobu działania klasy. Aktualnie bede rozpoczynac prace nad wdrożeniem cache'owania wiec za jakiś moze tydzien posle jeszce poprawioną wersję (jezeli ta sie spodoba)biggrin.gif
Pliki:
klasa
Plik konfiguracyjny
sf
Sporo się napracowałeś z tego co widze... tylko czy to praca nie na marne? Skoro jest PDO...

Pozatym te osobne funckje poza klasą to złe rozwiązanie. Ładowanie w ten sposób konfiguracji też mi nie przypadł - co jeżeli chciałbym utworzyć dwa obiekty, które łączą sie z dwoma różnymi bazami?

Pozatym takie rozwiązania jak "1=1" są niepotrzebne. Dajesz parametr jako array, ale wartość domyślna to string...

W ogóle takie metody jak insert, delete... to wszystko się nadaje jako osobna klasa i na tym bym Ci się radził skupić. ActiveRecord ostatnio jest w modzie.
gam3r
@sf:
-PDO : nie wiem czy na marne czy nie na marne, ale z tego co mi wiadomo to PDO nie wyszło jeszcze w wersji finalnej i pewnie bedą w nim wprowadzone jakieś zmiany, wiec korzystanie z niego nie jest dobrym pomysłem - coś co działa teraz w PDO, nie koniecznie musi działać tak samo później.
-osobne funkcje poza klasą są właściwie nie potrzebne tam, ponieważ najpierw chciałem zrobić aby w metodach update/select/insert/delete "prześwietlac" te wprowadzane dane, celem by wprowadzic te dodatkowe ukośniki, ale właściwie to niepotrzebne bo: w większości firm hostingowych "magiczne ukośniki" są włączone, a poza tym czytałem gdziieś że w php6 opcja ta ma być już stała
-właśnie o to chodzi we wzorcu SINGLETON aby tworzyc tylko jedno połączenie, mi nie bedzie potrzebne korzystanie z kilku baz, ale jezeli komus tak, to mozna raczej lekko przerobic te klase i bedzie ok
-wiem ze mozna byc ten warunek where opuścić ale chyba to nic nie zmienia wydajności, bo np. w książce "bazy danych i mysql. od podstaw" autorzy w niektorych przypadkach proponowali takie rozwiązanie tworzenia zapytań, wiec wg. mnie to nic nie zmienia sprawy
-a metody insert/update/select/delete to w sumie są zbędne i to taki mały bajer, ale bez trudu można korzystać tylko z doQuery() czy getAll(), getRow().....
sf
Można utworzyć singleton, który będzie korzystał z kilku połączeń. Robisz tablice instancji gdzie kluczem jest DSN.

PDO wyszło w stabilnej wersji 26 listopada 2005 roku.

Książka to nie są przykazania winksmiley.jpg Kod jest piękniejszy, a co za tym idzie czytelniejszy bez zbędnych pierdół.
gam3r
jesli chodzi o singletona z wieloma połączeniami to rozumiem że i tak można (ale czy to wtedy bedzie juz SINGLETON - gdy utworzymy kilka połączeń?), ale mi to nie jest potrzebne, wiec tego nie robilem, a jezeli ktos chce to nie jest to w sumie wielki problem troche przerobic klase. PDO jest b.dobre ale ja na serwie gdzie mam hosting (forall.pl) to nie mam pdo włączonego dla mysql tylko dla sqlite, wiec to mi tez nie jest potrzebne. Poza tym lepiej użyć takiej nakładki jezeli np. te klase bedziesz wykorzystywac w kilku innych klasach - to przy zmianie platformy BD, albo sposobu połączenia z BD (mysql/mysqli/pdo) łatwiej bedzie wprowadzic te zmiany w innych klasach (w sposobie wykonywania połączeń z BD) - wystarczy zmienić definicje klasy DB_connect i kod w pozostałych klasach nie musi być naruszony (chociaż w sumie to to samo co PDO ohmy.gif tongue.gif). Chyba rzeczywiście metody insert/select/update/delete są zbędne, wiec chyba je usunę... ale jeżeli chodzi o książke to nie są one jak przykazania, natomiast "PHP5.ZP" stworzyli doświadczeni programiści wiec chyba wiedzą co piszą i co jest dobre a co nie.
NuLL
No dobra - co jesli chce operowac na dwoch zbiorach wynikow jednoczesnie questionmark.gif
gam3r
  1. <?php
  2. $zbior1 = $db -> doQuery("SELECT * FROM news");
  3. $zbior2 = $db -> doQuery("SELECT * FROM articles");
  4.  
  5. foreach( $zbior1 as $row1)
  6. {
  7. //kod
  8. }
  9.  
  10. foreach( $zbior2 as $row2)
  11. {
  12. //kod
  13. }
  14. ?>

co za problem? albo o cos innego chodzi? blink.gif
NuLL
A co jesli ja chce miec wynik w postaci Iteratora questionmark.gif Albo tablicy questionmark.gif Albo obiektu wynikowego questionmark.gif

Nie kazdy wymaga parsowania resultu mysqla do tablicy. Co wtedy questionmark.gif

Pozatym jak wyglada obluga bledow questionmark.gif Mam zalozmy blad w skladni zapytania. JAk sie moge dostac do ostatniego bledu questionmark.gif
gam3r
no racja, w sumie myslalem o tym zeby zwracac wyniki w różnych postaciach, ale chyba wszystko i tak sie sprowadza mniej wiecej do tego samego... faktycznie, przy kolejnych poprawkach wezme to na uwage biggrin.gif no mamy wysjątki, można dopisać przy wyrzucaniu wyjątków coś takiego
  1. <?php
  2. if ( $blad ) 
  3. {
  4. throw GreenException("błąd wykonania zapytania do bazy: $this -> database" . $query );
  5. }
  6. ?>

no i wtedy widzisz jakie zapytanie jest złe:/
dobra widze ze jeszcze sporo do porawienia w klasie .... macie racje, kijowa jest... sad.gif
sf
W porownaniu z tymi, ktore sa na PHPClasses to jest niezla winksmiley.jpg Pare poprawek i bedzie w miare przyzwoita.
gam3r
no to jak poprawie tą klase to podeśle za jakiś czas lepszą wersje
NuLL
Ale ja bym chcial wiedziec jaki komentarz bledy wywala MySQL - to tak na boku.
gam3r
witam,
niedawno dałem wam do oceny klasę DB_connect, popłynęło tam sporo słów krytyki... sad.gif i postanowiłem tę klasę ulepszyć (tutaj źródło)

dodałem "obsługę cache'u" ( taką jak w arcie na webcity.pl ), usunąłem kilka metod, dodałem jakieś nowe. Oraz trochę zwiększyła się liczba form zwracanych wynikow tongue.gif proszę o ocenę sugestie...

Obsługa wyjątków za pomocą klasy iDBconnectExceptions...nie chciało mi się "dokumentować kodu", zrobię to w przyszłości, w jakiejś jeszcze ulepszonej wersji klasy...

trochę testowałem klasę, raczej wszystko chodzi dobrze - nie wiem jeszcze jak klasa działa z transakcjami przy aktywowanym cache'u, ale myślę że wszystko powinno hulać ...czekam worriedsmiley.gif
Rafiki
jak wrzucasz skrypty to postaraj sie zapewnic jakies slate hostowanie plikow a nie error 404 :|
gam3r
sorki, juz plik jest na servie
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.