2011-08-18 11 views
10

Próbuję użyć sterownika PDO_DBLIB PHP do połączenia ze zdalną bazą danych i mam pewne problemy.Błąd PHP łączący się z bazą danych MS SQL przy użyciu PDO_DBLIB

Baza danych można podłączyć za pomocą tego samego środowiska za pomocą telnetu i klienta SQL. Jednak podłączenie za pomocą następującego kodu w PHP nie działa:

<?php 
$conn = new PDO('dblib:dbname=TestDB;host=RemoteServer;charset=utf8', 'my_user', 'my_pass'); 

Uruchomienie tego kodu, czy to z linii poleceń lub Apache, daje następujący błąd:

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000] Unable to connect: Adaptive Server is unavailable or does not exist (severity 9)'

jestem w stanie połączyć się z bazą danych za pomocą tego samego kodu na innym serwerze sieciowym, co prowadzi do przekonania, że ​​jest to problem z konfiguracją. Pliki php.ini na dwóch serwerach wyglądają stosunkowo podobnie. Każda z nich ma włączone te same biblioteki PDO z tymi samymi skonfigurowanymi opcjami.

Czy ktoś ma pojęcie, dlaczego tak się dzieje?

+0

Proszę nie edytować swoje pytanie do powiedzenia Ci rozwiązało problem. Wybierz swoją odpowiedź jako zaakceptowaną odpowiedź poniżej. –

Odpowiedz

16

Okazuje się, że był to znacznie prostszy problem, niż myślałem. Z jakiegokolwiek powodu serwer programujący nie używał portu 1433 jako domyślnego portu w połączeniu i zamiast tego używał Port 4000.

Odkryłem to poprzez włączenie logów w pliku freetds.conf i monitorowanie ich podczas tworzenia prośba.

Należy również pamiętać: rozszerzenie DBLIB używa dwukropka (:) jako separatora między hostem a portem zamiast przecinka. Niestety błąd, który pojawia się podczas używania przecinka, nie jest zbyt opisowy, więc miejmy nadzieję, że ktoś skorzysta z tego odkrycia.

3

Zapis portu w freetds.conf bezpośrednio do tego hosta:

[RemoteServer] 
    host = RemoteServer 
    port = 1433 

I zostawić php-code nas jest:

$conn = new PDO('dblib:dbname=TestDB;host=RemoteServer;charset=utf8', 'my_user', 'my_pass'); 
Powiązane problemy