Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PDO] Migracja do innych baz danych
Forum PHP.pl > Forum > PHP > Object-oriented programming
Reptile ReX
Interesuje mnie jedna rzecz i strasznie mnie gryzie.
Wszędzie jest głośno o wieloplatformowości biblioteki PDO
To znaczy, że kod można przenosić pomiędzy innymi serwerami baz danych (Postgre, Mysql, MS SQL itd)
Tylko jak to naprawdę z tym jest, patrząc logicznie gdy wykonujemy zapytanie w MYSQL

  1. SELECT id FROM users WHERE id = 2 LIMIT 1;


To jest wszystko Ok, natomiast to samo zapytanie np. w MS SQL wyrzuci błąd, ponieważ nie ma tam LIMIT, jest TOP.
Czy PDO samo dba o tą kompatybilność ? jak trzeba to rozwiązywać ?

Dzięki z góry za zaspokojenie mojej ciekawości.
Pozdrawiam
Niktoś
Składnie trzeba poprawiać na to rady nie ma.W przypadku użycia np. FULL TEXT SEARCH różnice są już ogromne.Praktycznie wszystko musisz przerabiać(procedury składowe,triggery itp.),to jest całkiem inna baza danych na całkiem innym silniku,nie można sobie tak prosto z importować z MySQL do MSSQL i odwrotnie.
Reptile ReX
Ok, ale zawsze to mniej do zmiany niż bez biblioteki PDO smile.gif
Dzięki wielkie, czuje się lżej ;D
Niktoś
Widzisz PDO to narzędzie które chroni lepiej przed sql injection poprzez używanie(bindowanie) parametrów w zapytaniach, i nie jest to super konwerter baz danych.
Reptile ReX
Tak, znam PDO pod tym względem bindValue(), tylko zastanawiała mnie ta jego wieloplatformowość.
Niktoś
Tak będzie działać pod warunkiem ,że samo zapytanie będzie miało odpowiednią strukturę dla okreśonej bazy danych ,a twoim zadaniem jest żeby była ona poprawna.
Crozin
Cytat
PDO provides a data-access abstraction layer, which means that, regardless of which database you're using, you use the same functions to issue queries and fetch data. PDO does not provide a database abstraction; it doesn't rewrite SQL or emulate missing features. You should use a full-blown abstraction layer if you need that facility.
Tyle w temacie.
viking
Najlepiej zastosować Propel, Zend_Db, Doctrine i masz większość problemów z głowy. Inaczej można pisać w PDO ale wtedy sprawdzasz PDO::ATTR_DRIVER_NAME i w zależności od sterownika różne zapytania składać.
Reptile ReX
Myślałem też nad Active Record zaprezentowane przez CodeIgnitera, dosyć przyjemne w użytkowaniu
A biblioteka same dba o wieloplatformowość i w pewnym stopniu o bezpieczeństwo.
Tylko kwestia wyciągnięcia tej biblioteki z Frameworka, może okazać się nieprzyjemna - ale zobaczy się.
W każdym bądź razie, licencja tego frameworka pozwala na takie "wyciąganie" pod kilkoma drobnymi warunkami.

Zapytania przez tą biblioteką składa się używając metod $this->select(), $this->where, $this->limit(), $this->join() itd
Gorzej z bardziej skomplikowanymi zapytaniami, wtedy już trzeba użyć $this->query().
A wtedy nici z wieloplatformowości, ale chyba jednak na to się zdecyduję, bo nie planuję używać w projekcie jakiś "dziwnych" zapytań.
A stawiam priorytet na czytelność kodu, obiektowość oraz wieloplatformowość.

Z drugiej strony CodeIgniter korzysta z funkcji mysql_, mssql_ etc, co ma wpływ troszkę na bezpieczeństwo.
Bo np. mysql_real_escape_string, można ominąć (przy korzystnych warunkach - kodowania znaków)
viking
W sumie to samo masz w Zendzie a adaptery oczywiście pracują na PDO http://framework.zend.com/manual/en/zend.db.html . Dołożyłbyś do tego Cache i piękna sprawa. Może też spodoba Ci się pomysł nowego Zf2 (http://packages.zendframework.com/docs/latest/manual/en/zend.db.html).
Przypomniałeś mi jeszcze o http://www.phpactiverecord.org/
Dla samego MySQL http://www.fabian-spillner.de/mariaquery/
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.