Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Wygodna klasa obslugi mysql, klasa obslugi mysql lub innych baz po drobnej modyfikacji funkcji
ergo
post 7.07.2006, 12:08:33
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
Jojo
post 7.07.2006, 12:22:08
Post #2





Grupa: Zarejestrowani
Postów: 405
Pomógł: 1
Dołączył: 19.09.2003
Skąd: Lublin

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


Ameryki to Ty nie odkryłeś. Jakbyś przeszukał forum, to zobaczyłbyś, że podobna klasa już była tu prezentowana.

Moim zdaniem to co pokazujesz to nic specjalnego...


--------------------
Rozwój cywilizacji informatycznej to wyścig między programistami, którzy wytwarzają coraz łatwiejsze
programy użytkowe dla idiotów, a światem produkującym coraz lepszych gatunkowo idiotów.

Blog: Małolepszy.info
Go to the top of the page
+Quote Post
ergo
post 7.07.2006, 12:24:02
Post #3





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

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


Cytat(Jojo @ 7.07.2006, 11:22 ) *
Ameryki to Ty nie odkryłeś. Jakbyś przeszukał forum, to zobaczyłbyś, że podobna klasa już była tu prezentowana.

Moim zdaniem to co pokazujesz to nic specjalnego...

za to ty zbyt konstruktywny nie jestes, to ze nie jest odkrywcze to wiem, ja sie pytam co mozna ulepszyc i rozszerzyc, byle nie kosztem wydajnosci.


--------------------
Go to the top of the page
+Quote Post
siemakuba
post 7.07.2006, 12:34:46
Post #4





Grupa: Przyjaciele php.pl
Postów: 1 112
Pomógł: 20
Dołączył: 10.04.2005

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


w metodzie sqlquote powinieneś jeszcze sprawdzać stan magic_quotes_gpc. Jeżeli będą włączone i przekażesz dane z $_POST np. do mysql_real_escape_string zrobi się kiszka.
  1. <?php
  2. function sqlquote($zmienna)
  3. {
  4. { $zmienna = stripslashes($zmienna);
  5. }
  6.  // ....
  7. }
  8. ?>


pozdr.
Go to the top of the page
+Quote Post
ergo
post 7.07.2006, 12:40:11
Post #5





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

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


dzieki , juz poprawilem


--------------------
Go to the top of the page
+Quote Post
NuLL
post 7.07.2006, 13:36:39
Post #6





Grupa: Zarejestrowani
Postów: 2 262
Pomógł: 21
Dołączył: 3.05.2004
Skąd: Sopot, Krakow, W-wa

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


A co kiedy ja musze jednoczesnie operowac na dwoch wynikach dwoch zapytan questionmark.gif


--------------------
Javascript, Coffeescript, Node.js, Mongo, CouchDb, chmury, workery & inne bajery - zycie jest zbyt krotkie aby miec nudna prace :)
Go to the top of the page
+Quote Post
ergo
post 7.07.2006, 14:28:00
Post #7





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

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


przyznam sie ze nie mialem takiej sytuacji jeszcze, mozesz podac jakis konkretny przyklad zastosowania? bo nie bardzo widze do czego zmierzasz i jak by to moglo byc uzyte ( wiec zaimplementowane).


--------------------
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: 27.04.2024 - 05:56