Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Sterownik Bazy danych, Klasa, PHP 5
mike
post 2.11.2004, 00:03:54
Post #1





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


Prezętuję Wam sterownik bazy danych, w związku z tym że kodu jest sporo więc zamieściłem go tutaj:
DB.class.php <- klasa główna
Result.class.php <- klasa będąca wynikiem zapytania
ResultCached.class.php <- klasa będąca wynikiem zapytania cache'owanego
A oto przykład zastosowania:
  1. <?php
  2. include_once( 'ResultCached.class.php' );
  3. include_once( 'Result.class.php' );
  4. include_once( 'DB.class.php' );
  5.  
  6. $objDB = DB::GetInstance( 'localhost' , 'root', 'pass', 'test' );
  7. $objResult = $objDB->Query( 'SELECT * FROM users' );
  8. $objResult2 = $objDB->QueryCached( 'pass', 'SELECT * FROM news' );
  9.  
  10. while( $arrTab = $objResult->FetchRow() )
  11. {
  12. echo $arrTab[ 'user_name' ] . '<br>';
  13. }
  14.  
  15. while( $arrTab = $objResult2->FetchRow() )
  16. {
  17. echo $arrTab[ 'news_title' ] . '<br>';
  18. }
  19.  
  20. echo 'Czas wszystkich zapytań: ' . $objDB->GetExecutionTime() . '<br>';
  21. echo 'Ilość wszystkich zapytań bo bazy: ' . $objDB->GetQueryCnt() . '<br>';
  22. ?>


Proszę o komentarze, sugestie i krytykę. ;-)

Ten post edytował mike_mech 10.04.2005, 12:16:59
Go to the top of the page
+Quote Post
bela
post 2.11.2004, 00:21:11
Post #2


Administrator PHPedia.pl


Grupa: Developerzy
Postów: 1 102
Pomógł: 2
Dołączył: 14.09.2003

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


  1. <?php
  2. public function &GetInstance( $strDBHost, $strDBUser, $strDBPass, $strDBName )
  3. ?>


moze sie czepiam, ale czy & jest w php5 niezbędne
z tego co mi wiadomo ( czyt. hawk powiedział ) przekazywanie argumentow jest niezgodne z ideą singletona


--------------------
Go to the top of the page
+Quote Post
mike
post 2.11.2004, 00:35:24
Post #3





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


Cytat(bela_666 @ 2004-11-02 01:21:11)
moze sie czepiam, ale czy & jest w php5 niezbędne

& usunięte

A co do parametrówto nie wiem jak rozwiązać przekazanie parametrów do konstruktora w przypadku kiedy nie ma żadnego obiektu klasy. Dlatego GetInstance posiada parametry.
Go to the top of the page
+Quote Post
bela
post 2.11.2004, 00:40:04
Post #4


Administrator PHPedia.pl


Grupa: Developerzy
Postów: 1 102
Pomógł: 2
Dołączył: 14.09.2003

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


http://forum.php.pl/index.php?showtopic=22047&hl=singleton

krótko, zwięźle, na temat biggrin.gif


--------------------
Go to the top of the page
+Quote Post
bregovic
post 2.11.2004, 00:45:46
Post #5





Grupa: Zarejestrowani
Postów: 562
Pomógł: 15
Dołączył: 8.08.2003
Skąd: Denmark/Odense

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


mike_mech: Możesz po prostu napisać metodę setConf() która przekazywałaby konfigurację do obiektu, no i dopisać prywatną metodę connect().


--------------------
Prank - for the fun. Mac - for the simplicity. Deviantart - for the kick.
Life is ours, We live it our way -- Metallica
Go to the top of the page
+Quote Post
Neotion
post 2.11.2004, 13:06:19
Post #6





Grupa: Zarejestrowani
Postów: 67
Pomógł: 0
Dołączył: 13.09.2004

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


Dla mnie super!
Mogę wykorzystać ten sterownik w moim webNet'cie? Sam napisałem coś w tym stylu ale mój program nie umywa się do twojego skryptu smile.gif


--------------------
current: nexcite cms (0.2.5) running on top of netsource framework (0.5.3)

workbench: nsapi | php 5.1.2 | mysql 5.0.18 | phpmyadmin 2.9 rc1 | zend studio 5.2.0 | apache/2.2.0 (linux/suse)
Go to the top of the page
+Quote Post
mike
post 2.11.2004, 13:16:23
Post #7





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


Cytat(bregovic @ 2004-11-02 01:45:46)
mike_mech: Możesz po prostu napisać metodę setConf() która przekazywałaby konfigurację do obiektu, no i dopisać prywatną metodę connect().

Przy większej ilości czasu wstawie popawki i twoje sugestie.

Cytat(Neotion @ 2004-11-02 14:06:19)
Dla mnie super!
Mogę wykorzystać ten sterownik w moim webNet'cie? Sam napisałem coś w tym stylu ale mój program nie umywa się do twojego skryptu

Właśnie po to jest ten dział na forum żeby pokazać swój kod a jak komuś się spodoba to żeby z tego kozystał. No może z pozostawieniem notki o autorze tongue.gif
Go to the top of the page
+Quote Post
Neotion
post 3.11.2004, 14:19:09
Post #8





Grupa: Zarejestrowani
Postów: 67
Pomógł: 0
Dołączył: 13.09.2004

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


dzięki przyda się a w dokumentacji i w plikach z klasami będzie stosowna notka


--------------------
current: nexcite cms (0.2.5) running on top of netsource framework (0.5.3)

workbench: nsapi | php 5.1.2 | mysql 5.0.18 | phpmyadmin 2.9 rc1 | zend studio 5.2.0 | apache/2.2.0 (linux/suse)
Go to the top of the page
+Quote Post
mike
post 4.11.2004, 13:45:27
Post #9





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


Sterownik zmieniony. Zmian niewiele ale są. Oto one:

1. Konstruktor klasy DB został zmieniony na:
  1. <?php
  2. /**
  3.  * Konstruktor klasy
  4.  * @access private dostęp do klasy poprzez metodę GetInstance
  5.  */
  6. private private function __construct()
  7.  {
  8.  }
  9. ?>


2. Doszła nowa metoda w klasie DB opowiedzialna za połączenie z bazą:
  1. <?php
  2. /**
  3.  * Funfcja odpowiadająca za połączenie z bazą
  4.  * @param string $strDBHost nazwa serwera
  5.  * @param string $strDBUser nazwa użytkownika
  6.  * @param string $strDBPass hasło dla użytkownika
  7.  * @param string $strDBName nazwa bazy danych
  8.  * @return bool true w przypadku udanego nawiązania z bazą
  9.  */
  10. public function Connect( $strDBHost, $strDBUser, $strDBPass, $strDBName )
  11. {
  12. if( !$this->boolConnected )
  13. {
  14. $this->resConnectID = @mysql_connect( $strDBHost, $strDBUser, $strDBPass );
  15. if( $this->resConnectID )
  16. {
  17. $resDBSelect = @mysql_select_db( $strDBName , $this->resConnectID );
  18. if( !$resDBSelect )
  19. {
  20. mysql_close( $this->resConnectID );
  21. $this->Error();
  22. }
  23. else
  24. {
  25. $this->strDBName = $strDBName;
  26. $this->boolConnected = true;
  27. return true;
  28. }
  29. }
  30. else
  31. {
  32. $this->Error();
  33. }
  34. }
  35. }
  36. ?>


3. Doszło nawe pole w klasie DB:
  1. <?php
  2. /**
  3.  * Stan sterownika true-połączony z bazą, false-nie połączony z bazę
  4.  * @access private
  5.  * @var boolean
  6.  */
  7. private $boolConnected = false;
  8. ?>


4. Metody FetchRow w klasach Result i ResultCached dostały parametr:
  1. <?php
  2. /**
  3.  * Zwraca tablicę utworzon? z wyniku zapytania
  4.  * @access public
  5.  * @param integer $intResultType stała php określająca typ tablicy jaki ma być z
  6. rócony
  7.  * @return array|false zwraca wiersz z zapytania w postaci tablicy lub false w p
  8. zypadku błędu
  9.  */
  10. public function FetchRow( $intResultType = MYSQL_BOTH )
  11. {
  12. // bez zmian ( prawie )
  13. }
  14. ?>

A oto nowy przykład zastosowania:
  1. <?php
  2. include_once( 'ResultCached.class.php' );
  3. include_once( 'Result.class.php' );
  4. include_once( 'DB.class.php' );
  5.  
  6. $objDB = DB::GetInstance();
  7. $objDB->Connect( 'localhost' , 'root', 'pass', 'test' );
  8. $objResult = $objDB->Query( 'SELECT * FROM users' );
  9. $objResult2 = $objDB->QueryCached( 'pass', 'SELECT * FROM news' );
  10.  
  11. while( $arrTab = $objResult->FetchRow() )
  12. {
  13. echo $arrTab[ 'user_name' ] . '<br>';
  14. }
  15.  
  16. while( $arrTab = $objResult2->FetchRow() )
  17. {
  18. echo $arrTab[ 'news_title' ] . '<br>';
  19. }
  20.  
  21. echo 'Czas wszystkich zapytań: ' . $objDB->GetExecutionTime() . '<br>';
  22. echo 'Ilość wszystkich zapytań bo bazy: ' . $objDB->GetQueryCnt() . '<br>';
  23. ?>


Żródła tam gdzie poprzednio.
Go to the top of the page
+Quote Post
FiDO
post 5.11.2004, 23:31:08
Post #10





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%)
-----


mike_mech: przeczytaj regulamin tego podforum i dostosuj do niego temat aaevil.gif

edit: dziekuje winksmiley.jpg


--------------------
Brak czasu :/
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 Wersja Lo-Fi Aktualny czas: 25.04.2024 - 05:24