Home > Js, PHP > PDO_DBLIB (MSSQL) na Ubuntu Server

PDO_DBLIB (MSSQL) na Ubuntu Server

Czasem zachodzi potrzeba skorzystania z innego sterownika baz danych niż mysql. O ile sprawa wydawać by się mogła prosta i sprowadzać do wykonania jednej komendy pecl install, o tyle w przypadku sterownika do mssql nie jest to takie oczywiste.

Zaczynamy od zainstalowania potrzebnych pakietów:

# apt-get install php5-dev freetds-dev

Następnie próbujemy zainstalować rozszerzenie PDO_DBLIB które obsługuje Mssql server

# sudo pecl install PDO_DBLIB
pear/PDO_DBLIB requires PHP extension “pdo” (version >= 1.0)
No valid packages found
install failed

Jak widać ostrzymujemy błąd mimo, że mamy zainstalowaną odpowiednią wersję PDO. Będziemy
musieli zainstalować rozszerzenie ręcznie. Pobieramy więc paczkę PDO_DBLIB-1.0.tgz, możemy to zrobić na dwa sposoby: za pomocą wget lub pecl download PDO_DBLIB.

Rozpakowujemy pobraną paczkę i próbujemy zbudować rozszerzenie.

# tar zxvf PDO_DBLIB-1.0.tgz
# pecl build
configure: error: Cannot find FreeTDS in known installation directories
`/home/mateusz/PDO_DBLIB-1.0/configure’ failed

Otrzymujemy kolejny błąd. Tym razem widzimy ze jest problem ze ściezką do biblioteki FreeTDS. U mnie biblioteka ta jest zainstalowana w ‘/usr/share/freetds’, odpalamy więc skrypt configure z odpowiednim parametrem

# cd PDO_DBLIB-1.0
# ./configure –with-pdo-dblib=/usr/share/freetds

configure: error: Directory /usr/share/freetds is not a FreeTDS installation directory

Kolejny błąd tym razem jak dla mnie mniej zrozumiały. Długo szukałem i rozwiązaniem okazało się dodanie dwóch plików:

# sudo touch /usr/share/freetds/include/tds.h
# sudo touch /usr/share/freetds/lib/libtds.a

Kolejna próba i kolejny błąd:

# ./configure –with-pdo-dblib=/usr/share/freetds
configure: error: Cannot find php_pdo_driver.h

Skrypt konfiguracyjny nie może znaleźć pliku nagłówka php_pdo_driver.h (u mnie /usr/include/php5/ext). Gdy zajrzymy do skryptu configure zobaczymy, że skrypt szuka tego pliku w złym miejscu:

...
if test -f $abs_srcdir/include/php/ext/pdo/php_pdo_driver.h; then
...

Dodanie linka symbolicznego do odpowiedniego katalogu załatwi sprawę:
# ln -s /usr/include/php5/ext

Teraz już wszystko powinno zadziałać.

# ./configure –with-pdo-dblib=/usr/share/freetds
# make

Build complete.

Teraz przechodzimy do folderu modules gdzie mamy skompilowane pdo_dblib.so i kopiujemy je do odpowiedniego folderu u mnie ‘/usr/lib/php5/20060613+lfs’ pozostaje jeszcze dopisanie extension=pdo_dblib.so do pliku php.ini i restart apacha.

Konfiguracja zenda

Jeśli używamy Zend Framework, a ja akurat w tym projekcie używam, dostaniemy pewnie taki komunikat.
Message: The mssql driver is not currently installed

Rozwiązaniem jest dodanie w konfiguracji następującej linijki:
db.config.pdoType = dblib

Dalej standardowa konstrukcja:

1
2
3
$config = new Zend_Config_Ini( './configs/database.ini', 'mssql' );
$this->mssql = Zend_Db::factory(    $config->db->adapter,  $config->db->config->toArray() );
print_r($this->mssql->fetchAll("SELECT @@VERSION"));

Podsumowanie

Instalację PDO_DBLIB przeprowadziłem na Ubuntu server 9.10, testową instalacje przeprowadziłem też na swoim desktopie Ubuntu 10.04. Oczywiście nie w każdym przypadku instalacja musi przebiegać identycznie jak u mnie i zwracać takie same komunikaty błędów. To jest tylko opis moich doświadczeń z instalacją pdo_dblib.

Powiązane wpisy:

Kategorie:Js, PHP Tagi:, ,
  1. Brak komentarzy
  1. Brak jeszcze trackbacków

agencja reklamowa lublin ślub i wesele senniki