2011-08-18 13 views
10

Sto tentando di utilizzare il driver PDO_DBLIB di PHP per connettersi a un database remoto e sto avendo alcuni problemi.Errore PHP connessione al database MS SQL tramite PDO_DBLIB

Il database è collegabile tramite lo stesso ambiente tramite telnet e un client SQL. Tuttavia, la connessione utilizzando il seguente codice in PHP non funziona:

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

L'esecuzione di questo codice, sia che si tratti dalla riga di comando o Apache, produce il seguente errore:

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

sono in grado di connettersi al database utilizzando lo stesso codice su un server Web diverso, il che mi porta a credere che si tratti di un problema di configurazione. I file php.ini sui due server hanno lo stesso aspetto. Ciascuno ha le stesse librerie PDO abilitate con le stesse opzioni configurate.

Qualcuno ha idea del perché questo potrebbe accadere?

+0

Si prega di non modificare la tua domanda per dire che risolto il vostro problema. Seleziona la tua risposta come risposta accettata qui sotto. –

risposta

16

Si scopre che si trattava di un problema molto più semplice di quanto pensassi. Per qualsiasi motivo, il server di sviluppo non utilizzava la porta 1433 come porta predefinita nella connessione ed utilizzava invece la porta 4000.

Ho scoperto questo abilitando i log nel file freetds.conf e monitorandoli mentre stavo facendo la richiesta.

Inoltre, qualcosa da notare: l'estensione DBLIB utilizza i due punti (:) come separatore tra l'host e la porta anziché la virgola. Sfortunatamente, l'errore che ricevi quando usi una virgola non è molto descrittivo, quindi spero che qualcuno tragga vantaggio da questa scoperta.

3

Scrivi porta in freetds.conf direttamente per questo host:

[RemoteServer] 
    host = RemoteServer 
    port = 1433 

E lasciare php-code noi è:

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