Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PDO] Migracja do innych baz danych
Reptile ReX
post 24.03.2012, 12:00:36
Post #1





Grupa: Zarejestrowani
Postów: 119
Pomógł: 0
Dołączył: 19.01.2008

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


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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 9)
Niktoś
post 24.03.2012, 12:06:41
Post #2





Grupa: Zarejestrowani
Postów: 1 195
Pomógł: 109
Dołączył: 3.11.2011

Ostrzeżenie: (10%)
X----


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.
Go to the top of the page
+Quote Post
Reptile ReX
post 24.03.2012, 12:09:22
Post #3





Grupa: Zarejestrowani
Postów: 119
Pomógł: 0
Dołączył: 19.01.2008

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


Ok, ale zawsze to mniej do zmiany niż bez biblioteki PDO smile.gif
Dzięki wielkie, czuje się lżej ;D
Go to the top of the page
+Quote Post
Niktoś
post 24.03.2012, 12:12:44
Post #4





Grupa: Zarejestrowani
Postów: 1 195
Pomógł: 109
Dołączył: 3.11.2011

Ostrzeżenie: (10%)
X----


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.
Go to the top of the page
+Quote Post
Reptile ReX
post 24.03.2012, 12:14:35
Post #5





Grupa: Zarejestrowani
Postów: 119
Pomógł: 0
Dołączył: 19.01.2008

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


Tak, znam PDO pod tym względem bindValue(), tylko zastanawiała mnie ta jego wieloplatformowość.
Go to the top of the page
+Quote Post
Niktoś
post 24.03.2012, 12:16:44
Post #6





Grupa: Zarejestrowani
Postów: 1 195
Pomógł: 109
Dołączył: 3.11.2011

Ostrzeżenie: (10%)
X----


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.
Go to the top of the page
+Quote Post
Crozin
post 24.03.2012, 12:47:09
Post #7





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


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.
Go to the top of the page
+Quote Post
viking
post 25.03.2012, 13:04:51
Post #8





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

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


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ć.


--------------------
Go to the top of the page
+Quote Post
Reptile ReX
post 25.03.2012, 21:14:40
Post #9





Grupa: Zarejestrowani
Postów: 119
Pomógł: 0
Dołączył: 19.01.2008

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


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)

Ten post edytował Reptile ReX 25.03.2012, 21:18:32
Go to the top of the page
+Quote Post
viking
post 26.03.2012, 17:49:22
Post #10





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

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


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/


--------------------
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 11:06