Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [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
 
Start new topic
Odpowiedzi (1 - 15)
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.


--------------------
Brak czasu :/
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 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. ?>


--------------------
Brak czasu :/
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 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 tongue.gif Nigdy tak nie robiłem. Zrób jeszcze cachowanie i bedzie git winksmiley.jpg
Jeszcze by sie przydało zliczanie zapytań 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 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 winksmiley.jpg

a co do pierwszego pytania... też nie ma smile.gif


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 06:17