Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [klasa] Baza Danych (znowu (?))
Forum PHP.pl > Forum > Gotowe rozwiązania > Algorytmy, klasy, funkcje
Eagle
Witam, oto mała klasa obsługi bazy danych.
W klasie można ustawić okres ważności pliku cache.

Jeżeli ktoś ma pomysł co można(/należy) dodać lub poprawić to będę wdzięczny.

Nie wiem co mogę jeszcze napisać o tej klasie (bo nie ma w niej (jeszcze) nic ciekawego (?))
Klasa:
  1. <?php
  2. //===== Vulturis Script ====================================== 
  3. //= DataBase Class
  4. //===== By: ================================================== 
  5. //= Eagle / Orzeł [ xeagle@o2.pl ]
  6. //===== Current Version: ===================================== 
  7. //= 0.1
  8. //===== Compatible With: ===================================== 
  9. //=
  10. //===== Description: ========================================= 
  11. //=
  12. //===== Additional Comments: ================================= 
  13. //=
  14. //=
  15. //=
  16. //============================================================
  17.  
  18. class dbase 
  19. {
  20. # Id połączenia z baza
  21. var $int_connect;
  22.  
  23. # Katalog dla plikow cache
  24. var $str_cache_dir='';
  25.  
  26. # Waznosc pliku cache
  27. var $int_cache_time=0;
  28.  
  29. # Czas wykonania ostatniego zapytania
  30. var $int_last_query_time=0;
  31.  
  32. # Ilość rekordów ostatniego zapytania
  33. var $int_last_quert_count=0;
  34.  
  35. //========================
  36. //= Polaczenie z baza danych
  37. //========================
  38.  
  39. //========================
  40. //= Kody bledow:
  41. //= @0
  42. //= @1 - Brak polaczenia z serwerem
  43. //= @2 - Nie mozna wybrac bazy
  44. //=
  45. //========================
  46.  
  47. public function __construct($t_db_host,$t_db_user,$t_db_pass,$t_db_base,$t_cache_dir='',$t_cache_time=3000)
  48. {
  49. $this->str_cache_dir = $t_cache_dir;
  50. $this->int_cache_time = $t_cache_time;
  51.  
  52. $this->int_connect=mysql_connect($t_db_host,$t_db_user,$t_db_pass);
  53.  
  54. if(!$this->int_connect)
  55. {
  56. return 1;
  57. exit();
  58. }
  59.  
  60. if(!mysql_select_db($t_db_base))
  61. {
  62. return 2;
  63. exit();
  64. }
  65. }
  66.  
  67. //========================
  68.  
  69. //========================
  70. //= Zapytanie (bez cache)
  71. //========================
  72.  
  73. //========================
  74. //= Zwraca tablice z wynikami zapytania
  75. //========================
  76. public function query($t_query)
  77. {
  78. $t_query_time = $this->get_microtime();
  79.  
  80. if($t_que = mysql_query($t_query))
  81. {
  82. while($t_row = mysql_fetch_array($t_que))
  83. {
  84. $t_query_res[] = $t_row;
  85. }
  86. }
  87.  
  88. $this->int_last_quert_count=count($t_query_res);
  89. $this->int_last_query_time = $this->get_microtime() - $t_query_time;
  90.  
  91. return $t_query_res;
  92. }
  93.  
  94. //========================
  95.  
  96. //========================
  97. //= Zapytanie (z cache)
  98. //========================
  99.  
  100. //========================
  101. //= Zwraca tablice z cache lub bezpośrednio z bazy
  102. //========================
  103. public function query_cache($t_name, $t_query)
  104. {
  105. if($this->str_cache_dir=='')
  106. return $this->query($t_query);
  107.  
  108. $t_file = 0;
  109. $t_cache_file_name = $this->str_cache_dir . $t_name . '.qcache';
  110.  
  111.  
  112. if(file_exists($t_cache_file_name))
  113. {
  114. $t_file=1;
  115.  
  116. #Sprawdzanie waznosci pliku cache (kasowanie lub nie)
  117. if(time() - filemtime($t_cache_file_name) > $this->int_cache_time)
  118. {
  119. $this->remove_cache($t_name);
  120. $t_file=0;
  121. }
  122. # ===
  123. }
  124.  
  125. if($t_file==0)
  126. {
  127. $t_query_res = $this->query($t_query);
  128.  
  129. $t_free_file = fopen($this->str_cache_dir . $t_name . '.qcache','w');
  130. if(!fwrite($t_free_file,serialize($t_query_res)))
  131. {
  132. return $t_query_res;
  133. }
  134. }
  135. else
  136. {
  137. $t_free_file = fopen($this->str_cache_dir . $t_name . '.qcache','r');
  138. $t_c_query = unserialize(fread($t_free_file,filesize($this->str_cache_dir . $t_name . '.qcache')));
  139. $this->int_last_quert_count = count($t_c_query);
  140. return $t_c_query;
  141. }
  142.  
  143. fclose($t_free_file);
  144. return $t_query_res;
  145.  
  146. }
  147.  
  148. //========================
  149.  
  150. //========================
  151. //= Kasowanie pliku cache
  152. //========================
  153. public function remove_cache($t_name)
  154. {
  155. $t_cache_file_name = $this->str_cache_dir . $t_name . '.qcache';
  156.  
  157. if(file_exists($t_cache_file_name))
  158. {
  159. unlink($t_cache_file_name);
  160. }
  161. }
  162. //========================
  163.  
  164. //========================
  165. //= Czas wykonywania ostatniego zapytania
  166. //========================
  167. public function get_last_query_time()
  168. {
  169. return $this->int_last_query_time;
  170. }
  171. //========================
  172.  
  173. //========================
  174. //= Ilość rekordów dla ostatniego zapytania
  175. //========================
  176. public function get_last_query_count()
  177. {
  178. return $this->int_last_quert_count;
  179. }
  180. //========================
  181.  
  182.  
  183. //========================
  184. //= Czas (aby wiedzieć ile trwało zapytanie)
  185. //========================
  186. private function get_microtime()
  187. {
  188. list($usec, $sec) = explode(" ",microtime());
  189. return ((float)$usec + (float)$sec);
  190. }
  191. //========================
  192.  
  193. //========================
  194. //= Koniec połączenia z bazą
  195. //========================
  196. public function close()
  197. {
  198. mysql_close($this->int_connect);
  199. }
  200. //========================
  201.  
  202. }
  203. ?>



Sposób użycia
Jeżeli folder na cache nie zostanie podany to wszystkie wyniki dla zapytań będą pochodziły bezpośrednio z bazy a nie z cache.


  1. <?php
  2. include ('class.php');
  3.  
  4. #host, uzytkownik, haslo, nazwa_bazy, folder_na_cache, waznosc_pliku_w_ms
  5. $baza = new dbase('localhost','login','haslo','nazwa bazy',['folder_na_cache/'],[3000]);
  6.  
  7. $wynik_bezcache = $baza->query('SELECT * FROM `config`');
  8. $wynik = $baza->query_cache('nazwa_pliku_cache','SELECT * FROM `config`');
  9.  
  10. echo $wynik . '<br/>';
  11.  
  12. echo $wynik[0][0]. '<br/>'; # lub echo $wynik[$NUMER_REKORDU]['NAZWA_Z_BD'];
  13. echo $wynik[0][1]. '<br/>';
  14. echo $wynik[1][0]. '<br/>';
  15. echo $wynik[1][1]. '<br/>';
  16.  
  17. echo 'Czas ostatniego zapytania: ' . $baza->get_last_query_time() . '<br/>'; # zwraca 0 jeżeli zapytanie jest z cache
  18. echo 'Rekordów dla ostatniego zapytania: ' . $baza->get_last_query_count() . '<br />';
  19. ?>
Moli
Nie podoba mi się sposób z cache. Wolę coś takiego. Bez cache
Kod
$baza->query(zapytanie);

a z cache
Kod
$baza->cache(uchwyt);
$baza->query(zapytanie);
sticker
czemu nie skorzystać z gotowego rozwiązania np z PEARA i je podziedziczyć dla własnych potrzeb, nie wiem jak to jest ale ludzie lubią nadkładać sobie pracy
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.