Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [skrypt]klasa do obsługi MYSQL
ziom
post 9.03.2006, 09:42:55
Post #1





Grupa: Zarejestrowani
Postów: 35
Pomógł: 0
Dołączył: 13.02.2005

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


Witam!

W dziale 'php' nie chcieli mi powiedzieć co jest nie tak to zakładam, że jest spox i proszę o ocene.
No i niech mi w końcu ktoś powie czy jestem na dobrym tropie, a może wywalić to wszystko w kosmos?worriedsmiley.gif

Klasa napisana w ramach 'sterownika', który ma sprawić, że moja aplikacja nie będzie całkowicie uzależniona od bazy danych.

  1. <?php
  2. class DB 
  3. {
  4. // var $cache_dir
  5. public $cache_dir = ''; //katalog, w którym składowane są cache z danego pliku
  6. // var $bufor
  7. protected $bufor = array();
  8. // var $cache_file
  9. public  $cache_file = 'cache'; //plik cache
  10.  
  11. // var $conn
  12. public $conn;
  13. // var $db
  14. public $db;
  15. // var $result
  16. protected $result;
  17.  
  18. // var $rows
  19.  private  $rows;
  20.  
  21. ////////////////////////////////////////////////////
  22. ////////////////////////////////////////////////////
  23. ////////////////////////////////////////////////////
  24. //funckcja sprawdzająca czy plik cache isnieje
  25. protected function cache_exists($var)
  26. {
  27. if(file_exists($this->cache_dir.$var))
  28. {
  29. return(true);
  30. }
  31. else
  32. {
  33. return(false);
  34. }
  35. }
  36. ////////////////////////////////////////////////////
  37. ////////////////////////////////////////////////////
  38. ////////////////////////////////////////////////////
  39. //konstruktor :)
  40. public function __construct($host, $db_user, $db_pass, $db_name)
  41. {
  42. //sprawdzanie, czy zostały podane wszystkie dane(prucz hasła, które niezawsze jest wymagane)
  43. if(empty($host) OR empty($db_user) OR empty($db_name))
  44. {
  45. print('Nie zostały podane wszystkie parametry połączenia z bazą danych!');
  46. }
  47. else
  48. {
  49. $this -> conn = mysql_connect($host, $db_user,$db_pass) or print(mysql_error());
  50. $this -> db = mysql_select_db($db_name);
  51. }
  52. }
  53. ////////////////////////////////////////////////////
  54. ////////////////////////////////////////////////////
  55. ////////////////////////////////////////////////////
  56. //destruktor tongue.gif
  57. public function __destruct()
  58. {
  59. if(!mysql_close($this -> conn))
  60. {
  61.  print('Nie można zamknąć połączenia!');
  62. }
  63. }
  64. ////////////////////////////////////////////////////
  65. ////////////////////////////////////////////////////
  66. ////////////////////////////////////////////////////
  67. //funkcja pytająca
  68. public function sql_query($query, $mode = '1')
  69. {
  70. //czytać z pliku cache? Jeżeli mode jest różne od 1 to nie
  71. $cache = $mode == 1 ? $this->cache_exists($this->cache_file) : false;
  72. //jeżeli plik cache nie istnieje to wykonaj zapytanie
  73. if(!$cache)
  74. {
  75. if(!empty($query))
  76. {
  77. $this->result = mysql_query($query, $this->conn) or
  78. ($err = mysql_error());
  79. if( $this->result )
  80. {
  81. return( $this->result );
  82. }
  83. else
  84. {
  85. print($err);
  86. }
  87. }
  88. else
  89. {
  90. return(false);
  91. }
  92. }
  93. else
  94. {
  95. return(1);
  96. }
  97. }
  98. ////////////////////////////////////////////////////
  99. ////////////////////////////////////////////////////
  100. ////////////////////////////////////////////////////
  101. //zapytanie do tablicy
  102. public function sql_fetch_array($result, $mode = '1',$typ = '1')//Dostępne wartości pola 'typ' to:1,2,3
  103. {
  104. $typy = array(
  105. '1' => MYSQL_ASSOC,
  106. '2' => MYSQL_NUM,
  107. '3' => MYSQL_BOTH
  108. );
  109. //jeżeli istnieje plik cache to pobierz z niego dane
  110. if(!$this -> cache_exists($this->cache_file))
  111. {
  112. //mode==0 czyli zapisuj do cache
  113. if($mode == '0')
  114. {
  115. while($rows = mysql_fetch_array($result,$typy[$typ]))
  116. {
  117. $this->bufor[] = $rows;
  118. }
  119. if($this->cache_write($this->cache_file))
  120. {
  121. return($this->bufor);
  122. unset($this->bufor);
  123. }
  124. else
  125. {
  126. return(false);
  127. }
  128. }
  129. //mode==1 czyli nie zapisuj do cache
  130. elseif($mode == '1')
  131. {
  132. while($rows = mysql_fetch_array($result,$typy[$typ]))
  133. {
  134. $this->bufor[] = $rows;
  135. }
  136. return($this->bufor);
  137. unset($this->bufor);
  138. }
  139. }
  140. else
  141. {
  142. $this->bufor = unserialize(file_get_contents($this->cache_dir.$this->cache_file));
  143. return($this->bufor);
  144. unset($this->bufor);
  145. }
  146. }
  147. ////////////////////////////////////////////////////
  148. ////////////////////////////////////////////////////
  149. ////////////////////////////////////////////////////
  150. //zapisuje do pliku cache
  151. protected function cache_write()
  152. {
  153. //jeżeli plik cache istnieje, zapisz, jeżeli nie zwróć false
  154. if(!$this -> cache_exists($this->cache_file))
  155. {
  156. if(file_put_contents($this->cache_dir.$this->cache_file, serialize($this->bufor)))
  157. {
  158. return(true);
  159. }
  160. else
  161. {
  162. return(false);
  163. }
  164. }
  165. }
  166. ////////////////////////////////////////////////////
  167. ////////////////////////////////////////////////////
  168. ////////////////////////////////////////////////////
  169. //usuwa cache
  170. public function delete_cache()
  171. {
  172. //jeżeli plik cache istnieje, usuń, jeżeli nie to zwróć false
  173. if($this -> cache_exists($this->cache_file))
  174. {
  175. if(unlink($this->cache_dir.$this->cache_file))
  176. {
  177. return(true);
  178. }
  179. }
  180. else
  181. {
  182. return(false);
  183. }
  184. }
  185. ////////////////////////////////////////////////////
  186. ////////////////////////////////////////////////////
  187. ////////////////////////////////////////////////////
  188. //pierwszy record
  189. public function get_first_record($query)
  190. {
  191. $record = $this->sql_fetch_array($query,1,2);
  192. return $record[0][0];
  193. }
  194. ////////////////////////////////////////////////////
  195. ////////////////////////////////////////////////////
  196. ////////////////////////////////////////////////////
  197. //pierwszy wiersz
  198. public function get_first_row($query)
  199. {
  200. $row = $this->sql_fetch_array($query,1,3);
  201. return $row[0];
  202. }
  203. ////////////////////////////////////////////////////
  204. ////////////////////////////////////////////////////
  205. ////////////////////////////////////////////////////
  206. //ostatni rekord
  207. public function get_last_record($query)
  208. {
  209. $record = $this->sql_fetch_array($query,1,2);
  210. $rows = count($record)-1;
  211. $col = count($record[0])-1;
  212. return $record[$rows][$col];
  213. }
  214. ////////////////////////////////////////////////////
  215. ////////////////////////////////////////////////////
  216. ////////////////////////////////////////////////////
  217. //ostatni wiersz
  218. public function get_last_row($query)
  219. {
  220. $record = $this->sql_fetch_array($query,1,3);
  221. $row = count($record)-1;
  222. return $record[$row];
  223. }
  224. ////////////////////////////////////////////////////
  225. ////////////////////////////////////////////////////
  226. ////////////////////////////////////////////////////
  227. //transakcje
  228. public function Transaction ($var) 
  229. {
  230. $mode = strtolower($var);
  231. $array = array(
  232. 'fail' => 'ROLLBACK',
  233. 'complete' => 'COMMIT',
  234. 'start' => 'BEGIN'
  235. );
  236.  
  237. mysql_query($array[$mode]) or print(mysql_error());
  238. }
  239. ////////////////////////////////////////////////////
  240. ////////////////////////////////////////////////////
  241. ////////////////////////////////////////////////////
  242. //ilość wierszy
  243. public function num_rows($query)
  244. {
  245. if(!$this->cache_exists($this->cache_file))
  246. {
  247. return mysql_num_rows($query);
  248. }
  249. else
  250. {
  251. $rows = unserialize(file_get_contents($this->cache_dir.$this->cache_file));
  252. return count($rows);
  253. }
  254. }
  255. ////////////////////////////////////////////////////
  256. ////////////////////////////////////////////////////
  257. ////////////////////////////////////////////////////
  258. //ilość 'dotkniętych' wierszy
  259. public function affected_rows()
  260. {
  261. }
  262. }
  263. ?>

Edit: Klasy zapomniałem dodać tongue.gif

Ten post edytował ziom 9.03.2006, 22:18:13


--------------------
biuro rachunkowe
Go to the top of the page
+Quote Post
tiraeth
post 9.03.2006, 13:46:39
Post #2





Grupa: Przyjaciele php.pl
Postów: 1 789
Pomógł: 41
Dołączył: 30.10.2003
Skąd: Wrocław

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


To może na początku cache a nie cashe smile.gif

Poza tym, moim zdaniem, nie ma sensu tworzyć klasy obsługi mysql pod PHP5, bo jest wbudowana klasa mysqli() smile.gif
Go to the top of the page
+Quote Post
ziom
post 9.03.2006, 14:27:48
Post #3





Grupa: Zarejestrowani
Postów: 35
Pomógł: 0
Dołączył: 13.02.2005

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


może i nie, ale treningu nigdy za wiele winksmiley.jpg


--------------------
biuro rachunkowe
Go to the top of the page
+Quote Post
TomASS
post 9.03.2006, 14:43:33
Post #4





Grupa: Zarejestrowani
Postów: 1 660
Pomógł: 13
Dołączył: 9.06.2004
Skąd: Wrocław i okolice

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


1. Jest nieźle smile.gif
2. Ja bym dodał:
  1. <?php
  2. $this -> conn = mysql_connect($host, $db_user,$db_pass) or die('Nie mogę połączyć się z bazą danych!');
  3. ?>


Jak dal mnie bomba smile.gif


--------------------
Go to the top of the page
+Quote Post
hwao
post 9.03.2006, 15:32:33
Post #5


Developer


Grupa: Moderatorzy
Postów: 2 844
Pomógł: 20
Dołączył: 25.11.2003
Skąd: Olkusz




  1. <?php
  2. die('Nie zostały podane wszystkie parametry połączenia z bazą danych!');
  3. ?>

Was ist das?

Kod nie ma wogole sens:P

Pozatym w PHP5 sa wyjadki i nie powinno sie uzywac w bibliotekach procedur zamykajacych aplikacjce
Go to the top of the page
+Quote Post
ziom
post 10.03.2006, 22:57:47
Post #6





Grupa: Zarejestrowani
Postów: 35
Pomógł: 0
Dołączył: 13.02.2005

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


Cytat(hwao @ 2006-03-09 14:32:33)
  1. <?php
  2.             die('Nie zostały podane wszystkie parametry połączenia z bazą danych!');
  3.             exit;
  4. ?>

Was ist das?

Kod nie ma wogole sens:P

Pozatym w PHP5 sa wyjadki i nie powinno sie uzywac w bibliotekach procedur zamykajacych aplikacjce

poprawiłem smile.gif


--------------------
biuro rachunkowe
Go to the top of the page
+Quote Post
NetJaro
post 14.03.2006, 22:35:54
Post #7





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

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


Ja polecam używać mysql_pconnect zamiast mysql_connect. Czemu?

1) Nie trzeba używać (tworzyć) destruktora.

2) Działa szybciej ;-)
Go to the top of the page
+Quote Post
hwao
post 15.03.2006, 07:07:19
Post #8


Developer


Grupa: Moderatorzy
Postów: 2 844
Pomógł: 20
Dołączył: 25.11.2003
Skąd: Olkusz




Cytat(NetJaro @ 2006-03-14 22:35:54)
Ja polecam używać mysql_pconnect zamiast mysql_connect. Czemu?

1) Nie trzeba używać (tworzyć) destruktora.

2) Działa szybciej ;-)

nie zgadzam sie
Go to the top of the page
+Quote Post
NetJaro
post 15.03.2006, 10:15:22
Post #9





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

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


W czym.

Utwórz plik z użyciem mysql_connect i mysql_pconnect. Sprawdź szybkość na AB - o 0,2s działa szybciej winksmiley.jpg
Go to the top of the page
+Quote Post
kszychu
post 15.03.2006, 10:19:34
Post #10





Grupa: Przyjaciele php.pl
Postów: 2 712
Pomógł: 23
Dołączył: 27.10.2003
Skąd: z kontowni

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


Cytat(hwao @ 2006-03-15 07:07:19)
nie zgadzam sie

Hwao, może poprzyj swojąwypowiedź jakimiś argumentami. Celem działania forum jest między innymi dzielenie sięwiedzą z innymi.


--------------------
"Coś się kończy, coś się zaczyna." Andrzej Sapkowski
Go to the top of the page
+Quote Post
hwao
post 15.03.2006, 18:39:06
Post #11


Developer


Grupa: Moderatorzy
Postów: 2 844
Pomógł: 20
Dołączył: 25.11.2003
Skąd: Olkusz




Po 1:
enkapsulacja

w takim obiekcie jak baza danych wg mnie jest to bardzo wazne.

po 2 byla prowadzona rozmowa na temat pconnect/connect (niestety nie pamietam juz na ktorym forum, na tym czy innym czy to bylo anglo jezyczne..) w kazdym badz razie wyraznie wskazywalo one na uzywanie mysql_connect" title="Zobacz w manualu php" target="_manual
Go to the top of the page
+Quote Post
Bastion
post 16.03.2006, 19:26:54
Post #12





Grupa: Zarejestrowani
Postów: 505
Pomógł: 0
Dołączył: 8.01.2005

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


na szczescie w php 5 mysql_pconnect zostala usunieta, to prawda ze czas na ustanowienie polaczenia jest nizszy ale moze powodowac tragiczne skutki na witrynach o duzym ruchu (poprzez nawiazywanie polaczen stalych) i w efekcie doprowadzic do blokady dostepu do bazy danych


--------------------
Go to the top of the page
+Quote Post
NetJaro
post 16.03.2006, 19:31:15
Post #13





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

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


Usunięta? Ups.. a ja jej używam winksmiley.jpg

Nie sadze, by była gorsza.. thecrims jakoś jeździ(ło - nie wiem jak teraz) na nich.. raz wszedłem i wyskoczył error n/t braku odpowiedzi serwera (tzn. sql im padł), a oni mają sporą odwiedzalność.. 10.000 online?
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.06.2025 - 23:34