ForumCała strona

Nawigacja

Aktualnie online

Gości online: 10

Użytkowników online: 0

Łącznie użytkowników: 25,393
Najnowszy użytkownik: Assassin

Logowanie

Nazwa użytkownika

Hasło



Zarejestruj się

Odzyskaj hasło

Shoutbox

Musisz zalogować się, aby móc dodać wiadomość.

JazOOn
06.12.2024 23:45:46
Amen

Zbigniew@
17.11.2024 11:33:24
Nie ten grzeszy kto pije, ale ten, kto się nie upije.

JazOOn
16.11.2024 20:46:18
tja

Zbigniew@
15.11.2024 18:58:17
Kto pije, ten nie bije.

JazOOn
31.10.2024 20:49:47
Kto pije?

Pobierz nową wersję
Pobierz podręcznik
Zobacz inne oficjalne Supporty
Statystyki supportu
PHP-Fuson PL na Facebooku

RSS

Polecamy hosting SferaHost.pl

Zobacz temat

 Drukuj temat
Klasa DbConnect - łączenie z bazą danych
Chemikpil
Witajcie.
Ostatnio bawię się w obiektowy PHP (jakoś wcześniej nie było okazji). Dla ćwiczeń wykonałem prostą klasę, łączącą się z bazą i wykonującej zapytania do niej. Nie jest to nic profesjonalnego i nowego, więc proszę o nie pisanie komentarzy tupu, "proste", "takie to i ja potrafię" itp. Dobra do sedna.
Klasa o nazwie DbConnect ma za zadanie, jak już wspomniałem, połączyć się z bazą danych i wykonać jakieś zapytania. O to przykład użycia:
Pobierz kod źródłowy  Rozwiń Kod źródłowy


Działanie krok po kroku:
  1. Dodajemy klasę do pliku
  2. Tworzymy nowy obiekt klasy DbConnect a jako jego parametry przesyłamy nazwę hosta, użytkownika i jego hasło do bazy
  3. Następnie wywołujemy metodę connect(), umożliwiającą połączenie z wybraną bazą, poprzez pierwszy parametr. Drugi parametr prefix jest opcjonalny i przechowuje o prefix tabel w bazie. Można go wykorzystać w zapytaniach.
  4. Tworzymy zapytanie. Jak widać można tu wykorzystać nasz parametr prefix.
  5. Na koniec pobieramy element z tablicy danych.

Jak widać filozofii nie ma.

Teraz pytanie do osób obeznanych w temacie. Czy ta klasa jest optymalna, bo być może można zrobić coś lepiej, choć wiem że za dużo w niej nie ma :).
Ciekawi mnie też różnica pomiędzy
Pobierz kod źródłowy  Rozwiń Kod źródłowy
a
Pobierz kod źródłowy  Rozwiń Kod źródłowy

Szybkość?
Na koniec kwestia bezpieczeństwa, bo tu kuleje i to na dwie nogi.
Pozdrawiam.
Chemikpil dodał/a następującą plik:
dbconnect.zip [956Bajtów / 402 Pobrane]

Edytowane przez Chemikpil dnia 11.05.2010 23:37:51
Nie pisać na GG i PW w sprawach technicznych!
ChemikPil - blog (w nowej odsłonie) | ChemikPIL - My twitter
 
www.chemikpil.pl
Wścibski Gość
Dodany dnia 22.12.2024 20:24:15
Pan Kontekstualny

Postów: n^x
Data rejestracji: Zawsze

Polecamy hosting SferaHost.pl
IP: localhost  
bartek124
Po połączeniu z bazą powinieneś usunąć z pamięci dane do bazy, tj. hasło, nazwę itp.

Dwa, co z zapytaniami zagnieżdżonymi?
Pobierz kod źródłowy  Rozwiń Kod źródłowy

userbar_bartek124_net.png mw.gif Nie pomagam na komunikatorach oraz PW!
 
www.bartek124.net
Seba0p
1. Po co zapisujesz dane służące do połączenia się z bazą?

Co najwyżej przechowuj uchwyt połączenia z bazą (zwrócona wartość z funkcji mysql_connect).

Jeśli chcesz przechowywać tak cenne dane w klasie, to przynajmniej ustaw status ich dostępu na chroniony.

2. Nie widzę sensu czegoś takiego:

Pobierz kod źródłowy  Rozwiń Kod źródłowy


Od razu w konstruktorze napisz kod odpowiedzialny za połączenie z bazą danych. Skrócimy kod do:

Pobierz kod źródłowy  Rozwiń Kod źródłowy


3. W większości przypadków taki kod nie będzie przydatny:

Pobierz kod źródłowy  Rozwiń Kod źródłowy


W wartości query_fetch zostanie zapisany tylko pierwszy wiersz.

Jeśli chcemy wyciągnąć z bazy danych więcej wierszy, to i tak będziemy zmuszeniu do napisania własnego kodu, wykorzystując co najwyżej wartość query.
 
http://seba0p.pl
Chemikpil
Dobra.
Poprawiłem trochę kod:
  1. Po pierwsze nie trzymam już danych do bazy. Przekazywane są one do konstruktora, a samo połączenie trzymane jest w parametrze connect, który ma status private.
  2. Po drugie przeniosłem połączenie z bazą do konstruktora, lecz sam wybór bazy to mam pewne wątpliwości. Załóżmy, że mam na serwerze stronę w PF oraz forum oparte na phpBB. Każda ma osobną bazę, i teraz w jednym skrypcie chciał bym wyciągnąć dane z dwóch baz. To zamiast robić dwa konstruktory mam jeden, i korzystam tylko z metod. Tak ja to widzę, choć może myślę źle :)
  3. Usunąłem metodę tworzącą tablice elementów. Teraz to pozostawiam użytkownikowi klasy


Kod:
Pobierz kod źródłowy  Rozwiń Kod źródłowy


Bartek, zapytanie zagnieżdżone to jak na razie dla mnie temat tabu, choć konstruując same zapytanie nie ograniczam go w żaden sposób. Jest ono przekazane do metody i tam wykonane. Tak myślę, choć powtarzam, ja w obiektowości raczkuje dopiero.
Pozdrawiam.
Nie pisać na GG i PW w sprawach technicznych!
ChemikPil - blog (w nowej odsłonie) | ChemikPIL - My twitter
 
www.chemikpil.pl
Przejdź do forum:
Created by Arox Copyright (C) 2004
Copyright (C) 2004 - 2018 Ekipa PHP-Fusion.pl