Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Obiektowe poczatki...
Forum PHP.pl > Forum > Przedszkole
Rafiki
Witam.
Zaczynam dopiero programowac obiektowo i niezle sie w tym gubie smile.gif Narazie probuje napisac klase do obslugi mysql... wymeczylem cos takiego, chcialbym zapytac czy ide w dobrym kierunku czy moze w tym co napisalem juz sa jakies bledy smile.gif

  1. <?
  2. class mySQL 
  3. {
  4.  
  5. public $db;
  6. public $query;
  7.  
  8. // Łączenie z baża
  9.  
  10. public function __construct ($db)
  11. {
  12. $this -> mysql_connection = mysql_connect ($db['host'], $db['user'], $db['password']) or DIE ('Nie udało połączyć się z bazą danych <br />' . mysql_error());
  13. mysql_select_db ($db['name']) or DIE ('Nie udało się wybrać bazy danych <br />' . $br.mysql_error());
  14. }
  15.  
  16. // Zamykanie połączenia z bazą
  17.  
  18. public function __destruct ()
  19. {
  20. mysql_close($this -> mysql_connection);
  21. }
  22.  
  23. // Pobieranie wszystkich danych z bazy metoda fetch_array
  24.  
  25. public function getAllArray ($query) 
  26. {
  27. $this -> query = $query;
  28.  
  29. if ( $query = mysql_query ($this -> query) or DIE ('Nie można wykonać zapytania mySQL <br />' . mysql_error ()) )
  30. {
  31. while ($row = mysql_fetch_array ($query))
  32. {
  33. $result[] = $row;
  34. }
  35. }
  36. return $result;
  37.  
  38. }
  39.  
  40. }
  41. ?>


wykorzystanie takie:

  1. <? include('config.php');
  2.  
  3. function __autoload($class)
  4. {
  5. include_once 'class/class.'.$class.'.php';
  6. }
  7.  
  8. $mySQL = new mySQL($db);
  9.  
  10. $result = $mySQL -> getAllArray('SELECT * FROM news');
  11.  
  12. echo $result[0][autor]; ?>


Wogole nie wiem czy ide dobrym tropem i dobrze to pojmuje smile.gif

A tak przy okazji co powinno znajdowac sie wedlug was z dobrej klasie do obslugi mysql'a ?
Legro
Cytat
A tak przy okazji co powinno znajdowac sie wedlug was z dobrej klasie do obslugi mysql'a ?


zobacz w dziale gotowe skrypty/ gotowe klasy funkcje.. tam masz troche opisane co i jak.
ActivePlayer
  1. <?php
  2.  
  3.  if ( $query = mysql_query ($this -> query) or DIE ('Nie można wykonać zapytania mySQL <br />' . mysql_error ()) )
  4. ?>

to chyba najdziwniejsze zastosowanie die() jakie widzialem. w php5 mamy do czeynienia z wyjątkami i to je powinienneś zastosować.
Ociu
1. Zdefiniuj mysql_connection.
2.
  1. <?php
  2. while ($row = mysql_fetch_array ($query))
  3. {
  4. $result[] = $row;
  5. }
  6. ?>


nie lepiej:
  1. <?php
  2. return mysql_fetch_array($query);
  3. ?>
?

http://www.phppatterns.com/docs/design/dat...e_widgets?s=dao
Przeczytaj ten artykuł. Może trzeba mieć pojęcie o oop, ale naprowadzi Cie co powiniena mieć klasa do obsługi mysql.
Rafiki
Ok pozmienialem co nieco smile.gif

  1. <?php
  2.  
  3. class mySQL 
  4. {
  5.  
  6. public $db;
  7. public $query;
  8.  
  9. // Łączenie z baża
  10.  
  11. public function __construct ($db)
  12. {
  13. if ( $this -> mysql_connection = mysql_connect($db['host'], $db['user'], $db['password']) )
  14. {
  15. if ( !mysql_select_db($db['name']))
  16. {
  17. throw new Exception ('Nie można wybrać podanej bazy danych mySQL <br />' . mysql_error());
  18. }
  19. } else {
  20. throw new Exception ('Nie można uzyskać połączenia z serwerem bazy danych mySQL <br />' . $br . mysql_error());
  21. }
  22. }
  23.  
  24. // Zamykanie połączenia z bazą
  25.  
  26. public function __destruct ()
  27. {
  28. mysql_close( $this -> mysql_connection );
  29. }
  30.  
  31. // Konstrukcja zapytania
  32.  
  33. public function query ($query)
  34. {
  35. $this -> query = mysql_query($query);
  36. if ( strlen( mysql_error() ) > 0 )
  37. {
  38. throw new Exception ('Błąd w zapytaniu mySQL <br />' . mysql_error());
  39. }
  40. }
  41.  
  42. // Pobieranie wszystkich danych z bazy metoda fetch_array
  43.  
  44. public function getAllArray () 
  45. {
  46. if ( strlen( $this -> query ) > 1 || isset($this -> query))
  47. {
  48. $result = mysql_fetch_array($this -> query);
  49. return $result;
  50. } else {
  51. throw new Exception ('Aby wykonać zapytanie mySQL najpierw musisz je stworzyć');
  52. }
  53. }
  54.  
  55. }
  56.  
  57. ?>

Czy jest juz lepiej ? smile.gif co mozna jeszcze zmienic w tym czyms co napisalem ? jezeli jest w miare dobrze wezme sie konstruowanie dalszych funkcji....
_Mateo
Składnia wyjatkow jest troszke inna...

  1. <?php
  2.  
  3. try {
  4.  if(!mysql_connect(costam)) {
  5. throw new Exception ('nie mozna polaczyc z MySQL');
  6.  }
  7. }
  8.  
  9. catch (Exception $e) {
  10.  //zabawa z obiektem $e
  11. }
  12. ?>
Rafiki
Tzn moze sie myle bo w programowaniu obiektowym dopiero zaczynam
Ale try i catch to dopiero nie czasem uzywam sie gdy wykorzystuje juz sie konkretne klase i metode ? :| bynajmiej tak to wyczytalem z link

Napisalem cos nowego... z cachowaniem jednak cachowania jeszcze nie testowalem :/ Prosze o uwagi i rady.

  1. <?php
  2.  
  3. class sql
  4. {
  5.  
  6. public $db;
  7. public $query;
  8.  
  9. public $cache_state = 0;
  10. public $cache_file;
  11. public $cache_buffor;
  12. public $cache_pr;
  13.  
  14. // Łączenie z bazą
  15.  
  16. public function __construct ($db)
  17. {
  18. if ( $this -> sql_connection = mysql_connect($db['host'], $db['user'], $db['password']) )
  19. {
  20. if ( !mysql_select_db($db['name']))
  21. {
  22. throw new Exception ('Nie można wybrać podanej bazy danych mySQL <br />' . mysql_error());
  23. }
  24. } else {
  25. throw new Exception ('Nie można uzyskać połączenia z serwerem bazy danych mySQL <br />' . $br . mysql_error());
  26. }
  27. }
  28.  
  29. // Zamykanie połączenia z bazą
  30.  
  31. public function __destruct ()
  32. {
  33. mysql_close( $this -> sql_connection );
  34. }
  35.  
  36. // Cachowanie zapytan
  37.  
  38. public function sql_cache ($handle = 0)
  39. {
  40. global $db;
  41. if ( is_string($handle) )
  42. {
  43. if ( file_exists($db['dir_cache'].'sql_'.$handle.'.cache') )
  44. {
  45. $this -> cache_state = 1;
  46. $this -> cache_pr = 0;
  47. $this -> cache_buffor = unserialize(file_get_contents($db['dir_cache'].'sql_'.$handle.'.cache'));
  48. } else {
  49. $this -> cache_state = 2;
  50. $this -> cache_buffor = array();
  51. $this -> cache_file = $db['dir_cache'].'sql_'.$handle.'.cache';
  52. }
  53. } else {
  54. if( $this -> cache_state == 2 )
  55. {
  56. file_put_contents($this -> cache_file, serialize($this -> cache_buffor));
  57. }
  58. $this -> cache_state = 0;
  59. }
  60. }
  61.  
  62. // Usuwanie cachowanego zapytania
  63.  
  64. public function sql_cache_delete ($handle)
  65. {
  66. if( file_exists($db['dir_cache'].'sql_'.$handle.'.cache'))
  67. {
  68. unlink($db['dir_cache'].'sql_'.$handle.'.cache');
  69. }
  70. }
  71.  
  72. // Konstrukcja zapytania
  73.  
  74. public function sql_query ($query)
  75. {
  76. if ( $this -> cache_state != 1 )
  77. {
  78. $this -> sql_query = mysql_query($query);
  79. if ( mysql_errno() != 0 )
  80. {
  81. throw new Exception ('Błąd w zapytaniu mySQL <br />' . mysql_error());
  82. }
  83. return 1;
  84. }
  85. }
  86.  
  87. // Pobieranie wszystkich danych z bazy metoda mysql_fetch_array
  88.  
  89. public function sql_fetch_array()
  90. {
  91. if ( $this -> cache_state == 1 )
  92. {
  93. if ( !isset($this -> cache_buffor[$this -> cache_pr]) )
  94. {
  95. return 0;
  96. }
  97. $this -> sql_result = $this -> cache_buffor[$this -> cache_pr];
  98. $this -> cache_pr++;
  99. return 1;
  100. } else {
  101. if ( $this -> sql_result = mysql_fetch_array($this -> sql_query) )
  102. {
  103. if ( $this -> cache_state == 2 )
  104. {
  105. $this -> cache_buffor[] = $this -> sql_result;
  106. }
  107. return 1;
  108. }
  109. }
  110. return 0;
  111. }
  112. }
  113.  
  114. ?>
bigZbig
Cytat(_Mateo @ 2006-03-13 00:18:50)
Składnia wyjatkow jest troszke inna...

  1. <?php
  2.  
  3. try {
  4.  if(!mysql_connect(costam)) {
  5. throw new Exception ('nie mozna polaczyc z MySQL');
  6.  }
  7. }
  8.  
  9. catch (Exception $e) {
  10.  //zabawa z obiektem $e
  11. }
  12. ?>

@_Mateo - nie mieszaj try i catch sluzy do przechwytywania wyjatkow a nie do ich budowania. Wyjatek rzucasz gdzie ci sie podoba i przechwytujesz kiedy ci sie podoba. Najlepiej na samym koncu.
  1. <?php
  2.  
  3. funtion displayText($text){
  4. if (!$text) {
  5. throw new Exception ($text);
  6. }
  7. echo $text;
  8. }
  9.  
  10. try {
  11. // tu nastepuje proba bezblednego wykonania kodu
  12. displayText('tralala');
  13. }
  14. catch (Exception $e) {
  15.  // jesli kod sie nie wykona prawidlowo to w tym miejscu
  16.  // obslugujesz przechwycony wyjatek $e 
  17. }
  18. ?>
Rafiki
Mam jedno pytanie... otoz na poczatku classy mam:

  1. <?php 
  2. public $db;
  3. public $query;
  4.  
  5. public $cache_state = 0;
  6. public $cache_file;
  7. public $cache_buffor;
  8. public $cache_pr;
  9. ?>


W sumie nie wiem czy musze to dodawac ? Jak naczytalem sie artykulow to tak, ale w sumie w metodach w klasie sql i tak te pola sa tworzone w locie. Nie wiem czy sie dobrze wyrazilem bo myli mi sie juz wszystko smile.gif
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.