Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [klasa php5] obsługa bazy danych MySQL
Fipaj
post
Post #1





Grupa: Zarejestrowani
Postów: 691
Pomógł: 0
Dołączył: 19.01.2005
Skąd: Warszawa

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


Cześć :]
Postanowiłem napisać klasę do obsługi bazy danych MySQL.
Kod źródłowy

Łączenie z bazą odbywa się poprzez konstruktor, któremu musimy dostarczyć tablicę z elementami ‘host’, ‘database’, ‘user’ i ‘password’. Za rozłączanie odpowiedzialny jest destruktor :]
Aby “ustawić” dowolne zapytanie, trzeba utworzyć nowy obiekt klasy Query. Jedynym argumentem konstruktora klasy Query jest zapytanie SQL, potem można je edytować metodami Query::clear () [resetuje zapytanie] oraz Query::setQuery ($query) [ustawia nowe zapytanie].
Aby wykonać zapytanie inne niż “SELECT…”, użyj metody Amber::executeQuery (Query $query). Aby pobrać z tabeli wiele wierszy, użyj Amber::getAll (Query $query), a jeden wiersz - Amber::getRow (Query $query).

Przykład użycia znajduje się w kodzie źródłowym skryptu.
Go to the top of the page
+Quote Post
Levabul
post
Post #2





Grupa: Zarejestrowani
Postów: 197
Pomógł: 0
Dołączył: 11.07.2005

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


Cache by sie przydał ...
Go to the top of the page
+Quote Post
Fipaj
post
Post #3





Grupa: Zarejestrowani
Postów: 691
Pomógł: 0
Dołączył: 19.01.2005
Skąd: Warszawa

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


Mówiąc szczerze, zupełnie nie mam pomysłu na dorobienie cache'owania... Coś pokombinuję, nic nie obiecuję...
Go to the top of the page
+Quote Post
SongoQ
post
Post #4





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

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


Mam kilka uwag:
- brak obslugi transakcji
- brak zwrocenia ilosci zmodyfikowoanych, dodanych, usunietych rekordow
- brak zwrocenie id dodanego
Go to the top of the page
+Quote Post
FiDO
post
Post #5





Grupa: Przyjaciele php.pl
Postów: 1 717
Pomógł: 0
Dołączył: 12.06.2002
Skąd: Wolsztyn..... Studia: Zielona Góra

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


Ja dodam jeszcze, ze przydaly by sie funkcje getOne(), ktora zwraca pierwsza wartosc z pierwszego wiersza, przydaje sie do SELECT COUNT(*) FROM....

Jesli chodzi o cachowanie to sprawdza sie w tej roli serializacja. Ja wlasnie z niej korzystam do cachowania. Jest szybsza niz zapisywanie var_exportem i potem include, robilem porownanie.
Go to the top of the page
+Quote Post
Fipaj
post
Post #6





Grupa: Zarejestrowani
Postów: 691
Pomógł: 0
Dołączył: 19.01.2005
Skąd: Warszawa

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


2. i 3. gotowe.

transakcje i cache (?) będą jutro :]

FiDO: można dopisać metodę getOne(), ale to już jest chyba zbędne. a co do cache'owania to cały czas myślę i chyba nic nie wymyślę :] jak na razie zrobiłem prostą klasę do cache'owania plików .txt (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) teraz ją rozwijam o MySQL, zobaczymy, co z tego wyjdzie :]
Go to the top of the page
+Quote Post
FiDO
post
Post #7





Grupa: Przyjaciele php.pl
Postów: 1 717
Pomógł: 0
Dołączył: 12.06.2002
Skąd: Wolsztyn..... Studia: Zielona Góra

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


Cytat(Fipaj @ 2006-01-17 20:08:51)
FiDO: można dopisać metodę getOne(), ale to już jest chyba zbędne.

Wg mnie jest to bardzo przydatne. Po co pisac:

  1. <?php
  2.  
  3. $row = $db->getRow("SELECT COUNT(*) FROM tabela");
  4. $ile = $row[0];
  5.  
  6. // lub co gorsza:
  7. $rows = $db->getAll("SELECT COUNT(*) FROM tabela");
  8. $ile = $rows[0][0];
  9.  
  10. ?>


jak mozna:

  1. <?php
  2.  
  3. $ile = $db->getOne("SELECT COUNT(*) FROM tabela");
  4.  
  5. ?>
Go to the top of the page
+Quote Post
Fipaj
post
Post #8





Grupa: Zarejestrowani
Postów: 691
Pomógł: 0
Dołączył: 19.01.2005
Skąd: Warszawa

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


Metoda getOne() dodana :]
Obsługa transakcji też:
  1. <?php
  2.  
  3. $db -> startTransaction ();
  4. $db -> executeQuery...
  5. $db -> executeQuery...
  6. $db -> executeQuery...
  7. ...
  8. $db -> failTransaction ();
  9. // $db -> completeTransaction ();
  10.  
  11. ?>

Dostęp do bazy MySQL 5.0 będę miał za 4 miesiące (nieskonfigurowane backporty Ubuntu :/), tak więc nie mogę transakcji przetestować. I w ogóle nigdy z nich nie korzystałem.
Spójrzcie w kod, czy zadziała.

@Levabul: cały czas pracuję nad cache :]
Go to the top of the page
+Quote Post
SongoQ
post
Post #9





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

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


Transakcje nie zaleza od wersji tylko od rodzaju systemu tabeli (InnoDB)
Go to the top of the page
+Quote Post
Fipaj
post
Post #10





Grupa: Zarejestrowani
Postów: 691
Pomógł: 0
Dołączył: 19.01.2005
Skąd: Warszawa

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


Ale w wersji 5.0 transakcje zostały wprowadzone do MyISAM...?

PS. Jeśli chodzi o cache to ja się poddaję :/
Go to the top of the page
+Quote Post
Levabul
post
Post #11





Grupa: Zarejestrowani
Postów: 197
Pomógł: 0
Dołączył: 11.07.2005

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


http://webcity.pl/webcity/artykuly.php/t/51

Przykład cache'u (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
Go to the top of the page
+Quote Post
SongoQ
post
Post #12





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

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


Cytat
Ale w wersji 5.0 transakcje zostały wprowadzone do MyISAM...?

Nie sadze bo to by sie wiazalo ze spadkiem wydajnosci. No ale pewnie na stronie jakies info bedzie.
Go to the top of the page
+Quote Post
Fipaj
post
Post #13





Grupa: Zarejestrowani
Postów: 691
Pomógł: 0
Dołączył: 19.01.2005
Skąd: Warszawa

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


Tak, jest info w dokumentacji :] Sprawdziłem i obsługa transakcji Ambera jest zgodna zarówno z InnoDB na 4.x, jak i z MyISAM na 5.x.
Go to the top of the page
+Quote Post
Apo
post
Post #14





Grupa: Zarejestrowani
Postów: 426
Pomógł: 1
Dołączył: 2.10.2005

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


Fajny pomysł z tym konstruktorem i destruktorem (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) Nigdy tak nie robiłem. Zrób jeszcze cachowanie i bedzie git (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Jeszcze by sie przydało zliczanie zapytań (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) no i nie wiem czy lepiej by było to wszystko dać w 1 klase.

Ten post edytował Apo 28.01.2006, 17:40:03
Go to the top of the page
+Quote Post
gam3r
post
Post #15





Grupa: Zarejestrowani
Postów: 148
Pomógł: 0
Dołączył: 8.06.2005

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


a ja mam pytanko: staram się również zrobić klase obsługującą MySQLa i chciałbym wiedzieć czy lepiej do sprawdzania czy wystąpil jakiś błąd używać takiego sposobu:
  1. <?php
  2.  
  3. if( !mysqli_query( $this -> connection , $query )) 
  4. {
  5. throw new Exception("Błąd zapytania do DB:". $this -> database);
  6. }
  7.  
  8. ?>

czy takiego
  1. <?php
  2. mysqli_query( $this -> connection, $query );
  3. if( mysqli_error( $this -> connection ) ) 
  4. {
  5.  throw new Exception("Błąd zapytania do DB:". $this -> database);
  6. }
  7.  
  8. ?>

które jest lepsze? no jeżeli jest któreś lepsze (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
aha i jeszcze jedno pytanko jaka różnica w używaniu mysqli_real_escape_string() a mysqli_escape_string(), któraś funkcja lepsza?
Go to the top of the page
+Quote Post
Fipaj
post
Post #16





Grupa: Zarejestrowani
Postów: 691
Pomógł: 0
Dołączył: 19.01.2005
Skąd: Warszawa

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


Apo: jest już w jednej klasie. Zobacz Jungle w mojej sygnaturze.

Gam3r: doskonałe miejsce na takie pytania...
Cytat
jaka różnica w używaniu

nie ma. ta druga to alias pierwszej (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

a co do pierwszego pytania... też nie ma (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

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: 22.08.2025 - 15:17