Obsługa bazy danych SQL Server w PHP
Treść dodana: 16 grudnia 2015. Ostatnia modyfikacja: 03 grudnia 2016.
Pisałem ostatnio artykuł dotyczący instalacji serwera Apache 2.4 razem z PHP 7. W środowisku biznesowym rzadko pracuje się na, co by nie mówić, dość ubogim w funkcje silniku MySQL. Znacznie częściej można spotkać rozwiązania klasy enterprise – MSSQL lub Oracle. W tym krótkim aneksie do wcześniejszego tekstu chciałbym pokazać jak uruchomić rozszerzenia pdo_sqlsrv oraz sqlsrv.
Na początek dwie bardzo ważne uwagi. Po pierwsze. Rozszerzenie wydane przez firmę Microsoft działa obecnie tylko z wersją PHP poniżej 7 czyli 5.6, 5.5 oraz 5.4. Będziemy musieli zastąpić naszą konfigurację ostatnim stabilnym wydaniem linii 5, czyli na ten moment 5.6.16. Druga uwaga – rozszerzenie działa tylko z 32-bitową wersją PHP. Zatem do dzieła.
Aktualizacja: Microsoft wypuścił już nowe wersje rozszerzeń w wersji 4, które działają z PHP 7+. Dodano również wsparcie dla 64-bitowych systemów. Nie jest zatem konieczny, tak jak poprzednio, downgrade wersji PHP.
Konieczne jest pobranie kilku plików ze strony Microsoftu:
Microsoft – sterownik PHP dla SQL Server
Link przekieruje nas do instalatora w którym wybieramy do pobrania plik SQLSRV40.EXE. Możemy od razu go uruchomić. Po podaniu dowolnej ścieżki, wypakuje nam pliki rozszerzeń PHP SQL Server. Interesują nas dwa pliki rozszerzeń, które przegrywamy do katalogu D:\Server\php-7.0.0\ext:
php_sqlsrv_7_ts_x64.dll php_pdo_sqlsrv_7_ts_x64.dll
Standardowo należy dodać je do konfiguracji w pliku php.ini. Możemy, podobnie jak w artykule bazowym, wykorzystać plik `php.ini-development` zamieniając jego nazwę na `php.ini`. Poniżej aktywnych rozszerzeń dopisujemy:
extension=php_sqlsrv_7_ts_x64.dll extension=php_pdo_sqlsrv_7_ts_x64.dll
Od strony PHP to wszystko, chyba że będą nam jeszcze potrzebne dodatkowe ustawienia sqlsrv. Polecam skorzystać z dokumentacji PHP aby dowiedzieć się jakie opcje można zmienić.
Pora na Apache. Modyfikujemy plik D:\Server\Apache24\conf\extra\httpd-fcgi.conf:
# Dla starszej wersji sterownika 3.2 podajemy poniżej ścieżkę dla PHP 5.6 - D:/Server/php-5.6.16-Win32 FcgidInitialEnv PATH "D:/Server/php-7.0.0;C:/WINDOWS/system32;C:/WINDOWS;C:/WINDOWS/System32/Wbem;" FcgidInitialEnv SystemRoot "C:/Windows" FcgidInitialEnv SystemDrive "C:" FcgidInitialEnv TEMP "C:/WINDOWS/Temp" FcgidInitialEnv TMP "C:/WINDOWS/Temp" FcgidInitialEnv windir "C:/WINDOWS" FcgidIOTimeout 64 FcgidConnectTimeout 16 FcgidMaxRequestsPerProcess 1000 FcgidMaxProcesses 50 FcgidMaxRequestLen 8131072 # Location php.ini: # FcgidInitialEnv PHPRC "D:/Server/php-5.6.16-Win32" FcgidInitialEnv PHPRC "D:/Server/php-7.0.0" FcgidInitialEnv PHP_FCGI_MAX_REQUESTS 1000 <Files ~ "\.php$>" AddHandler fcgid-script .php FcgidWrapper "D:/Server/php-7.0.0/php-cgi.exe" .php </Files>
Restartujemy serwer. Funkcja phpinfo() powinna zwrócić informację o aktywnych rozszerzeniach:
PDO drivers mysql, pgsql, sqlite, sqlsrv pdo_sqlsrv support enabled sqlsrv support enabled
Jeżeli tak się stało, możemy teraz przetestować nasze połączenie. Założyłem wcześniej odpowiedniego użytkownika oraz bazę.
<?php $dsn = "sqlsrv:Server=WORK\SQLEXPRESS;Database=test"; try { $conn = new PDO( $dsn, 'test', 'test'); $conn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); $sth = $conn->prepare("SELECT CONVERT(VARCHAR, SERVERPROPERTY('productversion')), CONVERT(VARCHAR, SERVERPROPERTY ('productlevel')), CONVERT(VARCHAR, SERVERPROPERTY ('edition'))"); $sth->execute(); $result = $sth->fetchAll(); print_r($result); } catch(Exception $e) { echo $e->getMessage(); }
Array ( [0] => Array ( [] => Express Edition (64-bit) [0] => 12.0.2000.8 [1] => RTM [2] => Express Edition (64-bit) ) )
Dodaj komentarz
- sieć
- http
- apache
- ssl
- php
- composer
- javascript
- jquery
- ajax
- html
- pdo
- sql server
- spl
- css
- sql
- mysql
- postresql
- mongodb
- psr
- programowanie
- regex
Wyszukaj interesujące Cię słowa kluczowe pośród istniejących porad.
Komentarze
Nie ma jeszcze żadnych komentarzy do wyświetlenia. Może chcesz zostać pierwszą osobą która podzieli się swoją opinią?