Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Wygodna klasa obslugi mysql, klasa obslugi mysql lub innych baz po drobnej modyfikacji funkcji
ergo
post
Post #1





Grupa: Zarejestrowani
Postów: 79
Pomógł: 0
Dołączył: 8.03.2005

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


co sadzicie o takim podejsciu do biblioteki obslugujacej baze ?
dziala w php4, zawiera raportowanie bledow, posiada mozliwosc wyboru pomiedzy buforowaniem zapytan, potrafi cacheowac zapytania, i ma wsparcie dla transakcji.

chetnie uslysze co jest nie tak oraz co mozna ulepszyc.

przyklad uzycia
  1. <?php
  2. $db = new sqlklasa(DB_HOST,DB_LOGIN,DB_PASS,DB_NAME);
  3.  
  4. if($validator->ok['login'] && $validator->ok['password']){
  5. $db->fetcharray('SELECT * FROM '.DB_PREFIX.'users WHERE login='.$db->sqlquote($input->post('login')).' AND pass='.$db->sqlquote(md5($input->post('password'))));
  6. if(!empty($db->rekordy)){
  7. $_SESSION['user']=$db->rekordy[0];
  8. $db->zapytaj('UPDATE '.DB_PREFIX.'users SET data_ostatniego_logowania='.time().' WHERE id='.$_SESSION['user']['id']);
  9. }
  10. }
  11.  
  12. ?>



  1. <?php
  2. /**
  3.  * Tworzy polaczenie do bazy i zapewnia uniwersalny interfejs zapytan
  4.  * @author ergo
  5.  * @version 1.0
  6.  * @access public
  7.  */
  8. class sqlklasa {
  9. /**
  10.  * nazwa bazy
  11.  *
  12.  * @var integer
  13.  */
  14. var $baza;
  15. /**
  16.  * ilosc wykonanych zapytan
  17.  *
  18.  * @var integer
  19.  */
  20. var $zapytan;
  21. /**
  22.  * wynik wykonania zapytania
  23.  *
  24.  * @var mixed
  25.  */
  26. var $wynik;
  27. /**
  28.  * rekordy zwrocone przez serwer sql
  29.  *
  30.  * @var array
  31.  */
  32. var $rekordy;
  33. /**
  34.  * identyfikator polaczenia sql
  35.  *
  36.  * @var unknown_type
  37.  */
  38. var $link;
  39. /**
  40.  * tablica zawierajaca blednie wykonane zapytania
  41.  *
  42.  * @var array
  43.  */
  44. var $error;
  45. /**
  46.  * tablice zawierajaca dobrze wykonane zapytania
  47.  *
  48.  * @var array
  49.  */
  50. var $sql;
  51. /**
  52.  * buforujemy czy nie
  53.  *
  54.  * @var boolean
  55.  */
  56. var $buffered;
  57. /**
  58.  * postarcza polaczenia z baza danych
  59.  *
  60.  * @param string $host
  61.  * @param string $login
  62.  * @param string $pass
  63.  * @param string $baza
  64.  */
  65. function sqlklasa($host, $login, $pass, $baza) {
  66. $this->link = mysql_connect($host, $login, $pass);
  67. $this->baza = $baza;
  68. $this->buffered = false;
  69. if (!$this->link) {
  70. $this->error[]=mysql_errno($this->link).':'.mysql_error($this->link);
  71. }
  72. $db_selected = mysql_select_db($this->baza, $this->link);
  73. if (!$db_selected) {
  74. $this->error[]=mysql_errno($this->link).':'.mysql_error($this->link);
  75. }
  76. }
  77. /**
  78.  * rozpoczyna transakcje 
  79.  */
  80. function rozpocznij_transakcje(){
  81. $this->zapytaj('SET AUTOCOMMIT = 0');
  82. $this->zapytaj('BEGIN');
  83. }
  84. /**
  85.  * zakoncza transakcje
  86.  */
  87. function zakoncz_transakcje(){
  88. if(!empty($this->error)){
  89. $this->zapytaj('ROLLBACK');
  90. }else{
  91. $this->zapytaj('COMMIT');
  92. }
  93. }
  94. /**
  95.  * wykonuje zapytanie do bazy
  96.  *
  97.  * @param string $zmienna
  98.  */
  99. function zapytaj($zmienna) {
  100. $db_selected = mysql_select_db($this->baza, $this->link);
  101. if (!$db_selected) {
  102. $this->error[]=mysql_errno($this->link).':'.mysql_error($this->link);
  103. }
  104. $this->zapytan++;
  105. $this->rekordy = NULL;
  106. if($this->buffered==false){
  107. $this->wynik = @mysql_unbuffered_query($zmienna, $this->link);
  108. }else{
  109. $this->wynik = @mysql_query($zmienna, $this->link);
  110. }
  111.  
  112. if ($this->wynik === false) {
  113. $this->error[]=mysql_errno($this->link).':'.mysql_error($this->link).' - '.$zmienna;
  114. return false;
  115. }
  116. else{
  117. $this->sql[]=$zmienna;
  118. return $this->wynik;
  119. }
  120. }
  121.  
  122. /**
  123.  * pobiera dane jako tablice
  124.  * @param string $zmienna
  125.  * @param integer $cached [opcja]
  126.  * @param string $gdzie [opcja]
  127.  */
  128. function fetcharray($zmienna,$cached=false,$gdzie=NULL) {
  129. $db_selected = mysql_select_db($this->baza, $this->link);
  130. if (!$db_selected) {
  131. $this->error[]=mysql_errno($this->link).':'.mysql_error($this->link);
  132. }
  133. if(is_integer($cached) && !empty($gdzie) && (@filemtime(KATALOG_CACHE.$gdzie.'.sqlcache')>time()-$cached)) {
  134. $this->rekordy=@unserialize(@file_get_contents(KATALOG_CACHE.$gdzie.'.sqlcache'));
  135. $this->sql[]=$zmienna;
  136. }
  137. else{
  138. $this->rekordy = NULL;
  139. $this->zapytaj($zmienna);
  140. while ($wiersz = @mysql_fetch_array($this->wynik)) {
  141. $this->rekordy[] = $wiersz;
  142. }
  143. if(is_integer($cached) && !empty($gdzie)){
  144. $handle = fopen(KATALOG_CACHE.$gdzie.'.sqlcache', 'wb');
  145. fwrite($handle,serialize($this->rekordy));
  146. fclose($handle);
  147. }
  148. }
  149.  
  150. }
  151. /**
  152.  * zwalnia wynik zapytania z pamieci
  153.  *
  154.  */
  155. function zwolnij() {
  156. @mysql_free_result($this->wynik);
  157. }
  158. /**
  159.  * zamyka polaczenie z baza
  160.  *
  161.  */
  162. function zamknij() {
  163. @mysql_close($this->link);
  164. }
  165. /**
  166.  * zabezpiecza zmienna przed sql injection
  167.  *
  168.  * @param string $zmienna
  169.  * @return string
  170.  */
  171. function sqlquote($zmienna) {
  172. $zmienna = stripslashes($zmienna);
  173. }
  174. if (is_numeric($zmienna) == FALSE) {
  175. $zmienna = "'".mysql_real_escape_string($zmienna)."'";
  176. }
  177. return $zmienna;
  178. }
  179. ?>


Ten post edytował ergo 8.07.2006, 11:30:48
Go to the top of the page
+Quote Post

Posty w temacie


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: 24.12.2025 - 03:50