Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] PDO - czy warto?, Nowy interfejs baz danych
WebCM
post
Post #1





Grupa: Zarejestrowani
Postów: 375
Pomógł: 20
Dołączył: 28.07.2006

Ostrzeżenie: (0%)
-----


Czy warto zastosować PDO? Nie wszystkie serwery jeszcze posiadają PHP5. Aktualnie (2.06.2007) na DHost.info wciąż jest zainstalowana wersja 4.7, choć na forum jest umieszczona ankieta, czy dokonać aktualizacji. Stawiam głównie na szybkość.

Niektóre zalety
1. Prawdopodobnie nie trzeba dołączać pliku sterownika bazy danych (np. db/mysql.php)
2. PDO zabezpiecza zapytanie automatycznie przed SQL Injection
3. Obsługa wyjątków.
4. Ilość zaktualizowanych rekordów (np. po to, aby wyświetlić, czy operacja się udała).
5. Obsługa SQLite 3.

Niektóre wady
1. Więcej operacji + (prawdopodobnie) większe zużycie RAM.
2. Wciąż trzeba pisać niektóre zapytania osobno dla różnych typów baz (szczególnie CREATE TABLE).
3. Więcej kodu PHP

Aktualnie stosuję do odczytu danych funkcję db_read() z 5 parametrami, która pobiera dane i zapisuje je od razu do tablicy numerycznej LUB asocjacyjnej BĄDŹ zmiennej (w zależności od 3 i 4 argumentu). Wystarczy podać nazwę tabeli bez prefiksu, wyciągane pola, nazwę tablicy/zmiennej, typ oraz warunek. Potem odczytuję dane z użyciem funkcji FOR. W przypadku przejścia na PDO trzeba będzie pisać pełne zapytania.

Może się okazać, że przesiadka na PDO sprawi tylko więcej problemów niż korzyści. Jeżeli macie już jakieś doświadczenia z tym interfejsem, wypowiedzcie się.

Dodane: czy funkcje klasy są kopiowane w pamięci RAM dla każdego obiektu?

Dodane 2: test PDO->__construct() vs. mysql_connect() i mysql_select_db() :: Tutaj nie ma wielkiej różnicy, ale pod Windowsem jest duża - utworzenie obiektu PDO jest kilka razy wolniejsze (nawet 100ms). Zwróćcie uwagę, że połączenie z bazą nie jest zamykane - dlatego proceduralna metoda jest tu wolniejsza. Gdy odwrócę kota ogonem, proceduralny sposób jest najszybszy.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Ludvik
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 698
Pomógł: 3
Dołączył: 28.03.2004
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Cytat
Nie wszystkie serwery jeszcze posiadają PHP5.

PHP4 umiera, jedynym powodem do powstrzymania się przed aktualizacją jest kompatybilność z aplikacjami.

Cytat
Stawiam głównie na szybkość.

Swego czasu, na łamach php solutions ukazał się artykuł porównujący interfejsy dostępu do baz danych. Nie chcę przesadzić, ale PDO plasowało się w czołówce. A że było to dawno, więc mogło się zmienić raczej na korzyść PDO...

Cytat
1. Prawdopodobnie nie trzeba dołączać pliku sterownika bazy danych (np. db/mysql.php)

Wystarczy odpowiedni DSN.

Cytat
1. Więcej operacji + (prawdopodobnie) większe zużycie RAM.

Po pierwsze to jest hipoteza. Po drugie, nie sądzę, żeby te różnice były zbyt duże.

Cytat
2. Wciąż trzeba pisać niektóre zapytania osobno dla różnych typów baz (szczególnie CREATE TABLE).

Przed tym to tylko uchroni ORM, który i tak będzie musiał do uwzględnić... Języka zapytań dla danego systemu nie przeskoczysz, nawet z pomocą PDO. Szczególnie, kiedy liczy się wydajność.

Cytat
3. Więcej kodu PHP

To nie jest argument. Po pierwsze, nie zauważyłem specjalnie wzrostu ilości kodu po zastosowaniu PDO. Po drugie, ilość kodu nie przekłada się na wydajność. Po trzecie, dzięki wyjątkom i modelowi obiektowemu, PDO jest czytelniejsze i bezpieczniejsze w użyciu.

Cytat
Aktualnie stosuję do odczytu danych funkcję db_read() z 5 parametrami, która pobiera dane i zapisuje je od razu do tablicy numerycznej LUB asocjacyjnej BĄDŹ zmiennej (w zależności od 3 i 4 argumentu). Wystarczy podać nazwę tabeli bez prefiksu, wyciągane pola, nazwę tablicy/zmiennej, typ oraz warunek. Potem odczytuję dane z użyciem funkcji FOR. W przypadku przejścia na PDO trzeba będzie pisać pełne zapytania.

Pięć parametrów nie sprawia wrażenia łatwo przyswajalnego kodu. Tak czy inaczej, ta funkcja skleja dane w zapytanie SQL, więc równie dobrze możesz wyprowadzić klasę pochodną z PDO i zrobić to samo.

Po zastosowaniu połączeń trwałych, różnice w wydajności są tak małe, że nawet nie warto o nich myśleć. Na twojej stronie ukazało mi się coś takiego (za 3 razem...):
Kod
Proceduralny: 0.684
PDO (pierwszy obiekt): 0.333
MySQLi obiektowy :0.3

10% na niekorzyść PDO przy takich rzędach wielkości nie jest warte zachodu.

Tak czy inaczej, żeby napisać system niewrażliwy na środowisko, musimy utworzyć jakiś interfejs dostępu do bazy. PDO jest dobrą podstawą do tego, w gruncie rzeczy jedyny problem to dostosowanie zapytań, ale to akurat wina po stronie producentów DBMS, a nie twórców PDO.
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 4.10.2025 - 00:00