PHP i Sql Server 2005
2007-12-14 00:28 | 0 Comments | php
Przez ostatnie kilka tygodni, brałem udział w walce między dobrem (php+pg), a złem (mssql 2k5). Troszkę ironicznie to zabrzmiało, jednak
Kto by pomyślał, że migracja aplikacji napisanej w php, używającej PostgreSQL, przysporzy tyle problemów przy przepisaniu na MSSQL 2005. W zasadzie, w pewnym momencie, to był problem z uruchomieniem aplikacji napisanej w php z wykorzystaniem biblioteki mssql, na windows 2003.
Do rzeczy,
p>Moje środowisko dev, wygląda następująco:
- Windows XP pro
- apache2
- php 5 + rozszerzenie mssql
- PostgreSQL 8.1
- Sql Server 2005 express edition
Cel, przenieść aplikację z PG, na MSSQL.
Początkowo były problemy z łączeniem się do Mssql. Po przeczytaniu opisu połaczenia się z mssql - Dzięki Zbłąkany. Wiele mi się rozjaśniło. W moim przypadku dorzuciłem dll'ke z katalogu PHP do systemu, mimo to dalej nie działa.
Rozwiązanie - dll'ka jest stara, odkryłem to jak chciałem się połączyć z django do mssql celem sprawdzenia, czy to wina języka, czy może konfiguracji bazy danych. Zauważyłem, że biblioteka dll (ntwdblib.dll) jest w innej wersji. Nowszej. Wgrałem ją i poszło.
Pierwszy krok za nami, możemy już się połączyć do bazy danych.
Sama aplikacja nie jest skomplikowana, jest tylko Frontend'em do bazy danych. Można przeglądać dane, nie można ich edytować.
Kolejny problem,
SELECT * FROM tabela,
Gdzie zapytanie zwraca nam rekord, w którym mamy pole o typie Date. Pole Date prezentuje się w skonwertowanym temacie.
ini_set('mssql.textlimit', '2147483647');
ini_set('mssql.textsize', '2147483647');
ini_set('mssql.datetimeconvert', 'Off');
ini_set('mssql.charset', 'utf-8');
Drobne ustawienia pomagają na powyższe problemy. Możemy zwracać już poprawnie datę w formacie rrrr-mm-dd, oraz tekst nie jest ucinany do 4k, tylko jest "kompletny".
Kolejny problem, na windows 2003 nie można połączyć się do bazy danych. Po wgraniu aplikacji na serwer testowy, po skonfigurowaniu aplikacji, nie można się połączyć do bazy. Hm... Windows 2003 jak się okazało na iis, nie ładuje biblioteki mssql. Apache2 na windows 2003, wyrzuca od razu error, mówiący, że nie może załadować biblioteki.
Zainstalowałem IIS 5 na swoim xpeku i nie było najmniejszych problemów. Z serwera roboczego generalnie można się było połączyć do bazy danych, za pomocą konsoli, jednak przez php nie :)
No cóż, przenieśliśmy aplikację na odbc. Kwestia przepisania abstrakcji. Poszło. Mamy połączenie, działa na win 2k3. Jednak, nie mogliśmy odczytać niektórych kolumn (kolumny text). Nie istniały - huh?
Ostatecznie wylądował projekt na pdo_odbc, które działa jak najlepiej z wszystkich możliwych.
Literatura:
- biblioteka mssql - komentarze dot. połączenia
- mssql->query - komentarze dot. danych zwracanych
- driver sql - sterownik od Microsoftu