Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL] Początki OOP
Forum PHP.pl > Forum > Przedszkole
linw
Witam,

Napisałem strukturalnie pewien "serwis" ogłoszeń towarzyskich. Wszystko pięknie działa, postanowiłem jednak jakiś czas temu liznąć choć trochę programowania obiektowego, a celem praktycznym jest przepisanie głównych modułów tego serwisu właśnie kierując się podejściem obiektowym. Mam taką oto klasę łączącą się z serwerem MySQL (napisałem osobną klasę, bo chciałbym aby potem była ona dziedziczona w innych). Oto ona:

Kod
class MySQL {
    
private $db_host = 'localhost';
private $db_user = 'root';
private $db_haslo = '';
private $db_name = 'baza';
public $db_polaczenie;    
public $db_wybierz;
    
public function polacz_mysql($db_host, $db_user, $db_haslo, $db_name) {
    
    $this->db_polaczenie = mysql_connect($this->db_host, $this->db_user, $this->db_haslo);
    $this->db_wybierz = mysql_select_db($this->db_name);
    
    
}

public function rozlacz_mysql($db_polaczenie) {
    
    mysql_close($this->db_polaczenie);
    return true;
    
}
    


    
    
}


W pliku online.php mam fragmenty kodu odpowiedzialne za zliczanie autoryzowanych użytkowników online i przekazywanie naz użytkowników (loginów) do tablicy. Strukturalnie wszystko działa, ale w podejściu obiektowym mam problemy w formułowaniu zapytań do bazy po utworzeniu egzemplarza:

Kod
//tworzenie nowego egzamplarza klasy i wywołanie metody odpowiedzialnej za łączenie z bazą danych;
$obliczenia = new MySQL;
$obliczenia->polacz_mysql($db_host, $db_user, $db_haslo, $db_name);

$zapytanie_online = "SELECT users.u_login AS online FROM online, users WHERE online.u_id = users.u_id";


Googlując sobie trochę, znalazłem propozycję, aby łączyć się z bazą w ujęciu obiektowym za pomocą wbudowanej w php klasy, wygląda to tak:

Kod
@ db = new mysqli('localhost', 'user', 'pass', 'nazwa bazy');


Autor artykułu odwołuje się następnie do tego zapytania w sposób następujący:

Kod
$wynik = db->query($zapytanie);
$tablica = db->fetch_row($wynik);


Niestety nie potrafię zrozumieć, w jaki sposób wykonać takie zapytania jeśli chciałbym posłużyć się moją klasą. Próbowałem już wielu rozwiązań ale php wywala mi błędy. Czy mogę uzyskać waszą pomoc w jaki sposób odwołać się do odpowiednika obiektu db->query posługując się moim kodem? Jednocześnie jeśli pytanie wyda się lamerskie, prosiłbym zaawansowanych użytkowników o wyrozumiałość i nie obrzucanie mnie mięsem, że rzucam się z motyką na słońce nie znając podstaw :-) Z góry dziękuję za wszystkie odpowiedzi.
nithajasz
  1. <?php
  2. class db {
  3.  
  4. private $db_user;
  5. private $db_pass;
  6. private $db_name;
  7. private $db_server;
  8. private $link;
  9. private $result_id;
  10.  
  11. public function __construct($user=DB_USER, $pass=DB_PASS, $name=DB_NAME, $server=DB_SERVER){
  12.  
  13. $this->db_user = $user;
  14. $this->db_pass = $pass;
  15. $this->db_name = $name;
  16. $this->db_server = $server;
  17.  
  18. $this->connect();
  19.  
  20. }
  21.  
  22. private function connect(){
  23.  
  24. $this->link = @mysql_connect($this->db_server,$this->db_user,$this->db_pass) or die("can't connect to database");
  25. @mysql_select_db($this->db_name,$this->link) or die("can't select db (".$this->db_name.")";
  26.  
  27. } 
  28. private function disconnect(){
  29.  
  30. @mysql_close($this->link);
  31.  
  32. }
  33. public function __destruct(){
  34.  
  35. $this->disconnect();
  36.  
  37. }
  38.  
  39. private function query($sql){
  40. $rows = array();
  41. $this->result_id = @mysql_query($sql);
  42.  
  43. if($this->result_id){
  44. $rows = $this->fetch_rows();
  45. }
  46. return $rows;
  47. }
  48.  
  49. private function fetch_rows(){
  50.  
  51. $rows = array();
  52.  
  53. if($this->result_id){
  54. while($row = @mysql_fetch_object($this->result_id)){
  55. $rows[] = $row;
  56. }
  57. }
  58. return $rows;
  59. }
  60. }
  61. ?>


Teraz uruchamiamy :

  1. <?php
  2. // tworzymy obiekt bazy
  3. $dbObj = new db('user', 'pass', 'db', 'host');
  4.  
  5. // tworzymy zapytanie
  6. $query = $dbObj -> query ('SELECT * FROM tabela');
  7. $fetchRows = $dbObj -> fetch_rows();
  8. ?>


Jakoś tak pewnie autor tamtego artykułu ma stworzoną baze (a raczej napewno), tak więc jak widać na przykładzie autor odwołuje się do poszczególnych metod klasy. Tak więc jeśli chcesz odwołać się w swoim kodzie w taki sposób musisz napisać te poszczególne metody. Tylko nie wiem czy warto od nowa wynajdować koło jak jest tyle dobrych class do korzystania z bazy, począwszy od mysqli ( http://pl2.php.net/mysqli ). Jeśli nie odpowiada Ci ta klasa, to możesz na nią napisać jakiś extends i dopasować sobie jak chcesz. Polecam też http://wortal.php.pl/wortal/artykuly/bazy_...z_danych_w_php5 .

Co do nauki OOP to powodzenia smile.gif Na forum sporo można znaleźć na ten temat.
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.