konto usunięte

Temat: Połączenie z bazą danych

Jak realizujecie?

connect -> zapytanie -> parse do zmiennej -> zwolnienie i disconnect
* gdy zachodzi potrzeba pobrania czegoś z bazy/zapisu do niej

czy też może łączycie się w headerze, w kodzie strony wykonujecie dowolne zapytania/operacje i zamykacie handle w footerze.

A może jeszcze inaczej?

Ja osobiście mam zestaw drobnych funkcji postaci _sql(), _parse() itp, gdzie funkcja laczy sie, wykonuje query, rozlacza sie i zwraca rezultat.
Michał C.

Michał C. Deputy Head of
Software Development

Temat: Połączenie z bazą danych

No ja mam u siebie cache. Łączę więc się z bazą danych tylko po to aby dokonać aktualizacji cache. Poza tym rozłączanie sie po wykonaniu może skutkować tym, że jeszcze raz skrypt się bedzie musiał łączyć z bazą danych, co trwa dosyć długo.
Jacek Litwin

Jacek Litwin właściciel, internet
ART

Temat: Połączenie z bazą danych

wchodzę do domu - piję kawę - wychodzę z domu - wchodzę do domu - jem pączka - wychodzę z domu - wchodzę do domu - zjadam ciastko - wychodzę z domu

a prościej, mniej męcząco i szybciej było by: wchodzę do domu - piję kawę - jem pączka - zjadam ciastko - wychodzę z domu :]

konto usunięte

Temat: Połączenie z bazą danych

A może jeszcze inaczej?

$article = new Article($_GET['id']);
echo $article->content; // :)Jarek Śmiejczak edytował(a) ten post dnia 29.08.07 o godzinie 07:59
Filip Górny

Filip Górny Programista,
webdeveloper.

Temat: Połączenie z bazą danych

MVC z PDO. Klasa Database, w __construct jest connect, w __destruct pdo = null

konto usunięte

Temat: Połączenie z bazą danych

Jacek L.:
wchodzę do domu - piję kawę - wychodzę z domu - wchodzę do domu - jem pączka - wychodzę z domu - wchodzę do domu - zjadam ciastko - wychodzę z domu

a prościej, mniej męcząco i szybciej było by: wchodzę do domu - piję kawę - jem pączka - zjadam ciastko - wychodzę z domu :]

Dobra sugestia.. Ale nie możesz porównywać życia z kodem, choć ten przykład jest w pewnym sensie adekwatny.

A co jeśli na danej podstronie nie potrzebuję w ogóle danych z bazy? System się połączy i rozłączy i straci tylko czas.

Temat: Połączenie z bazą danych

[author]Jakub /lazarus/
Michał C.

Michał C. Deputy Head of
Software Development

Temat: Połączenie z bazą danych

[author]Jakub /lazarus/
Adrian Wieczorek

Adrian Wieczorek Full Stack Developer

Temat: Połączenie z bazą danych

[author]Jakub /lazarus/
Jakub L.

Jakub L. Programista

Temat: Połączenie z bazą danych

Łączenie do bazy jest dłuuuuuuuuuuuuuuuuuuuuuuuuuugie.
Do wspomnianego singletona zastosowałbym opóźnioną inicjalizację on-demand - w konstruktorze dzieje się nic, połączenie do bazy następuje podczas pierwszego query i zostaje zapamiętane do destrukcji klasy połączenia.
Filip Górny

Filip Górny Programista,
webdeveloper.

Temat: Połączenie z bazą danych

Nie popadajmy w skrajnosci. W 99% przypadkow zawsze potrzebne jest jakies zapytanie, no chociaz po to zeby sprawdzic sesje albo wyswietlic kod banera. Mozna sie licytowac w nieskonczonosc na pomysly w optymalizacji kodu ale mowmy o praktyce. Jesli juz zaoszczedzac czas to cachowaniem.

konto usunięte

Temat: Połączenie z bazą danych

Singletony - farmazony. Wystarczy mysql_connect. Przez PDO mogą nie być dostępne wszystkie funkcje wybranej bazy, więc nie zawsze chyba jest idealnym rozwiązaniem.

Ja w prostych skryptach "na wczoraj" miałem tak:

1) walidacja parametrów
2) jeśli złe to die() lub inny bardziej obrazowy komunikat
3) jeśli strona statyczna to wyświetlenie, inaczej:
4) połączenie z bazą
5) przetworzenie zapytania (GET/POST) lub wyświetlenie strony
6) ew. zamknięcie połączenia

(6) jest opcjonalne bo np. dla MySQL i tak połączenie się zamyka automatem na koniec skryptu, a można wpaść w tarapaty jeśli się zacznie xxx_close() wplatać do środka funkcji, które chcielibyśmy wykorzystać w innych funkcjach... Oczywiście takie plątanie nie występuje jeśli się stosuje klasy - patrz wypowiedzi o singletonach i innych..

Więcej o mysql_close
Paweł Malisak

Paweł Malisak PHP Developer

Temat: Połączenie z bazą danych

Piotr L.:
Singletony - farmazony. Wystarczy mysql_connect. Przez PDO mogą nie być dostępne wszystkie funkcje wybranej bazy, więc nie zawsze chyba jest idealnym rozwiązaniem.

Jeśli ktoś na poważnie myśli o PHP to czym prędzej powinien przejść na PDO. mysql_connect() jest przestarzałe.
Michał C.

Michał C. Deputy Head of
Software Development

Temat: Połączenie z bazą danych

Napiszesz skrypt uzywajac PDO, a tu sie okazuje ze na serwerze klienckim nie ma. I dupa zbita...

Jedynym słusznym rozwiązaniem są wszelkiego rodzaju ORMy, np. PROPEL. Wtedy znika problem z połączeniem, z PDO i mysql_xxxMichał Czerwiński edytował(a) ten post dnia 30.08.07 o godzinie 20:57
Paweł Malisak

Paweł Malisak PHP Developer

Temat: Połączenie z bazą danych

Michał C.:
Napiszesz skrypt uzywajac PDO, a tu sie okazuje ze na serwerze klienckim nie ma. I dupa zbita...

Na jakim nie ma? PHP4 jest rozwijany tylko do końca roku. PHP5 ma domyślne włączone PDO, a jak nie ma np. sterownika do postgresql co zdarzało mi się, wystarczyło napisać do hostingu i został w parę minut włączony moduł.

Co do tej zbitej dupy to wtedy raczej czuje się zobowiązany do poinformowania klienta, że jego hosting jest tragiczny i czym prędzej radzę mu go zmienić. Zwłaszcza, że jest dużo teraz ofert, które zapewniają pierwszy rok praktycznie za darmo. Jeśli użyjemy odpowiedniej argumentacji klient dodatkowo nabierze do nas zaufania, będzie pewien, że jego serwisem zajmuje się kompetentna osoba :)Paweł Malisak edytował(a) ten post dnia 30.08.07 o godzinie 21:41

konto usunięte

Temat: Połączenie z bazą danych

Michał C.:
Napiszesz skrypt uzywajac PDO, a tu sie okazuje ze na serwerze klienckim nie ma. I dupa zbita...

Jezeli korzystamy z hostingu zalozonego przez bande nastolatkow to pewnie mamy problem, ale myslac powaznie o hostowaniu swoich stron czy aplikacji webowych takiego problemu w ogle nie ma.

Michał C.:
Jedynym słusznym rozwiązaniem są wszelkiego rodzaju ORMy, np. PROPEL.

Nie zgodze sie i z tym stwierdzeniem. Gdy w gre wchodzi maksymalna wydajnosc mozesz zapomniec o ORMach. Wtedy albo mysql_* (itp) albo duzo lepsze PDO.

Michał C.:
Wtedy znika problem z połączeniem, z PDO i mysql_xxx

Znika "problem" ale pojawia sie nowy. Propel korzysta z Creole, ktore jest znacznie wolniejsze niz PDO (z wiadomych przyczyn).
Adrian Wieczorek

Adrian Wieczorek Full Stack Developer

Temat: Połączenie z bazą danych

Michał C.:
Jedynym słusznym rozwiązaniem są wszelkiego rodzaju ORMy, np.PROPEL. Wtedy znika problem z połączeniem, z PDO i mysql_xxx

PDO a ORM to dwie rozne sprawy. Mozna miec klasy DAO wygenerowane przez jakiegos mappera, ktore wlasnie kwestie dostepu do bazy zalatwiaja za pomoca PDO (czy tez ADOdb, mysql_xxx, whatever).

Nie ma sensu sie jednak licytowac co do tego, ze PDO to najlepszy sposob obslugi polaczenia z baza danych, bo tak nie jest.Adrian Wieczorek edytował(a) ten post dnia 30.08.07 o godzinie 22:31
Adrian Wieczorek

Adrian Wieczorek Full Stack Developer

Temat: Połączenie z bazą danych

Michał G.:
Nie zgodze sie i z tym stwierdzeniem. Gdy w gre wchodzi maksymalna wydajnosc mozesz zapomniec o ORMach. Wtedy albo mysql_* (itp) albo duzo lepsze PDO.

To akurat nie jest prawda, ale faktycznie klasy DAO generowane przez niektore ORM-y sa malo wydajne. Tak jest wlasnie z Propelem. Bynajmniej nie dyskwalifikuje to jednak takiego podejscia, przeciwnie w przypadku duzych obciazen daje ono spore pole manewru (np. poprzez prosta implementacje keszowania na poziomie obiektow DAO).
Paweł Malisak

Paweł Malisak PHP Developer

Temat: Połączenie z bazą danych

Najgorszym rozwiązaniem będzie używanie czystych zapytań SQL ;) Ten etap mam już za sobą. Różnego typu "budowniczowie" zapytań są wg mnie już standardem. Co do wydajności tych rozwiązań, osobiście nie zauważyłem problemów z tym związanych, po prostu dochodzi kwestia przeparsowania dodatkowych plików bo zapytanie końcowe powinno być takie samo.
Michał C.

Michał C. Deputy Head of
Software Development

Temat: Połączenie z bazą danych

Tracisz wydajność? Stworzyłem prostego ORMa, i wiesz jakos dużego spadku wydajności nie zauważyłem.
Za to dostajemy rekompensate w olbrzymim przyspieszeniu pracy z db.
A nazwiązując do propela. Wersje 1.x używają Creole, ale nowa wersja 2.x ma już zostać oparta o PDO.
A co do tych hostingów... To zyjecie w nie wiem jakim świecie... Nie wiem jak teraz jest ale 3 miesiace temu na nazwa.pl był php coś koło 5.1.x, tak wiec musiałem przepisac pare klas, ktore uzywały http://pl.php.net/filterMichał Czerwiński edytował(a) ten post dnia 30.08.07 o godzinie 23:51



Wyślij zaproszenie do