Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP5][MySQL5] Klasa obsługi bazy danych
Forum PHP.pl > Forum > Przedszkole
rasgan
Właśnie sobie napisałem nową klasę do obsługi bazy danych. Czy możecie podzielić się swoimi uwagami na jej temat?

  1. <?php
  2.  
  3. /**
  4.  * Klasa obsługi bazy danych opartej na MySQL
  5.  * 
  6.  * @author Marek 'Rasgan' Bednarczuk <marek.bednarczuk@gmail.com>
  7.  * @copyright Marek 'Rasgan' Bednarczuk <marek.bednarczuk@gmail.com>
  8.  * 
  9.  * @version 0.0.1
  10.  * 
  11.  * @todo Poprawić obsługę błędów
  12.  *
  13.  */
  14. class CDBO {
  15.  
  16. /**
  17.  * Obiekt reprezentujący połączenie z bazą danych
  18.  *
  19.  * @var object
  20.  */
  21. var $connection;
  22.  
  23. /**
  24.  * Informacja czy została wybrana baza danych
  25.  *
  26.  * @var bool
  27.  */
  28. var $database;
  29.  
  30. /**
  31.  * Wartość pola auto_increment dla tabeli z aktualnego zapytania
  32.  *
  33.  * @var int
  34.  */
  35. var $last_id;
  36.  
  37. /**
  38.  * Ilość zapytań, jaka została wykonana na obiekcie CDBO
  39.  *
  40.  * @var int
  41.  */
  42. var $queries;
  43.  
  44. /**
  45.  * Obecne zapytanie SQL zadane bazie danych
  46.  *
  47.  * @var string
  48.  */
  49. var $query;
  50.  
  51. /**
  52.  * Tablica asocjacyjna z wynikiem zapytania SQL
  53.  *
  54.  * @var array()
  55.  */
  56. var $records;
  57.  
  58. /**
  59.  * Zasób wyniku zapytania SQL
  60.  *
  61.  * @var object
  62.  */
  63. var $result;
  64.  
  65. /**
  66.  * Funkcja zamknięcia połączenia z bazą danych i zwolnienia wszystkich zasobów. 
    Zwraca informację, czy połączenie zostało zerwane.
  67.  *
  68.  * @return bool
  69.  */
  70. public function close() {
  71. if ( $this->connection ) {
  72. if ( $this->result ) {
  73. mysqli_free_result( $this->result );
  74. }
  75. @ mysqli_close( $this->connection );
  76. unset( $this->result );
  77. unset( $this->records );
  78. unset( $this->query );
  79. unset( $this->queries );
  80. unset( $this->last_id );
  81. unset( $this->database );
  82. unset( $this->connection );
  83. return true;
  84. }
  85. else {
  86. $this->error();
  87. return false;
  88. }
  89. }
  90.  
  91. /**
  92.  * Funkcja połączenia z bazą danych. Zwraca informację czy połączenie zostało za
    inicjowane.
  93.  *
  94.  * @param string $host
  95.  * @param string $user
  96.  * @param string $pass
  97.  * @param string $dbname
  98.  * @return bool
  99.  */
  100. public function connect( $host, $user, $pass, $dbname ) {
  101. $this->connection = @ mysqli_connect( $host, $user, $pass );
  102. if ( $this->connection != false && $dbname != '' ) {
  103. $this->database = @ mysqli_select_db( $this->connection, $dbname );
  104. if ( $this->database ) {
  105. return true;
  106. }
  107. else {
  108. $this->error();
  109. mysqli_close( $this->connection );
  110. return false;
  111. }
  112. }
  113. else {
  114. $this->error();
  115. return false;
  116. }
  117. }
  118.  
  119. /**
  120.  * Funkcja wyświetlania błędów związanych z obsługą bazy danych
  121.  *
  122.  */
  123. public function error() {
  124. echo '<p class="error">' . mysqli_errno( $this->connection ) . ' : ' . mysqli_error( $this->connection ) . "</p>n";
  125. }
  126.  
  127. /**
  128.  * Funkcja pobiera jeden wiersz z wyniku zapytania i zwraca go w postaci tablicy
     asocjacyjnej.
  129.  *
  130.  * @return array()
  131.  */
  132. public function get_row() {
  133. if ( $this->database && $this->result ) {
  134. $this->records = mysqli_fetch_array( $this->result, MYSQLI_ASSOC );
  135. if ( $this->records ) {
  136. return $this->records;
  137. }
  138. else {
  139. $this->error();
  140. return false;
  141. }
  142. }
  143. else {
  144. $this->error();
  145. return false;
  146. }
  147. }
  148.  
  149. /**
  150.  * Funkcja pobiera wszystkie wiersze z wyniku zapytania i zwraca je w postaci ta
    blicy asocjacyjnej.
  151.  *
  152.  * @return array()
  153.  */
  154. public function get_rows() {
  155. if ( $this->database && $this->result ) {
  156. $i = 0;
  157. while ( $row = mysqli_fetch_array( $this->result, MYSQLI_ASSOC ) ) {
  158. $this->records[$i] = $row;
  159. $i++;
  160. }
  161. if ( is_array( $this->records ) ) {
  162. return $this->records;
  163. }
  164. else {
  165. $this->error();
  166. return false;
  167. }
  168. }
  169. else {
  170. $this->error();
  171. return false;
  172. }
  173. }
  174.  
  175. /**
  176.  * Funkcja zadania zapytania do bazy danych. Zwraca zasób wyniku zapytania SQL.
  177.  *
  178.  * @param string $sql
  179.  * @return object
  180.  */
  181. public function set_sql( $sql ) {
  182. if ( $sql != '' && $this->database ) {
  183. $this->query = $sql;
  184. if ( $this->result ) {
  185. mysqli_free_result( $this->result );
  186. }
  187. if ( $this->result = mysqli_query( $this->connection, $this->query ) ) {
  188. $this->last_id = mysqli_insert_id( $this->connection );
  189. $this->queries++;
  190. return $this->result;
  191. }
  192. else {
  193. $this->error();
  194. return false;
  195. }
  196. }
  197. else {
  198. $this->error();
  199. return false;
  200. }
  201. }
  202. }
  203.  
  204. /*******************************/
  205. /*  */
  206. /* Przykład zastosowania klasy */
  207. /*  */
  208. /*******************************/
  209.  
  210. // inicjujemy nowy obiekt bazy danych
  211. $db = new CDBO();
  212. // łączymy się z bazą danych
  213. $db->connect( 'localhost', 'root', '', 'test');
  214. // zadejemy zapytanie bazie danych
  215. $db->set_sql( 'SELECT * FROM test' );
  216. // wyświetlamy wynik zapytania
  217. echo '<pre>';
  218. print_r( $db->get_rows() );
  219. echo '</pre>';
  220. // zrywamy połączenie z bazą danych
  221. $db->close();
  222. // niszczymy obiekt bazy danych
  223. unset( $db );
  224.  
  225. ?>
flv
Jak dla mnie to pisanie nakładki tylko po to żeby była jest conajmnmiej bezcelowe, z tego co widze to nie korzystasz z innych baz oprocz MySQL wiec tak właściwie po co to ? ; )

Klasa jak klasa, nic nadzwyczajnego..
rasgan
Bo trzeba dorobić jeszcze obsługę błędów (jak napisałem w todo) i właśnie mi podpowiedziałeś by dorobić obsługę innych baz
NetJaro
Nic ciekawego..
Gdzie jest cache?
Może PHP5? Więcej możliwości.

Ale brawo, że Ci się chcialo.. ja w tych czasach wolę korzystać z darmowych (co wcale nie znaczy, że złych, wręcz przeciwnie winksmiley.jpg ) klas smile.gif
Shavei
W PHP5, zamiast "var", jest:
- private,
- public,
- protected

I do czegoś takiego, dobrze jest dorobić "cache".
rasgan
właśnie nad tym pracuję, dziś powinienem zamieścić wersje 0.0.2

Właśnie przerobiłem moją klasę i dodałem kilka rzeczy. Znaleźć ją możecie tutaj Klasa CDBO Czekam na komentarze
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.