2011-08-18 7 views
10

Estoy intentando usar el controlador PDO_DBLIB de PHP para conectarme a una base de datos remota y tengo algunos problemas.Error de PHP al conectarse a la base de datos MS SQL usando PDO_DBLIB

La base de datos se puede conectar a través del mismo entorno utilizando telnet y un cliente SQL. Sin embargo, la conexión usando el siguiente código en PHP no funciona:

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

La ejecución de este código, ya sea desde la línea de comandos o Apache, da el siguiente error:

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

estoy en condiciones de conectarse a la base de datos usando el mismo código en un servidor web diferente, lo que me lleva a pensar que se trata de un problema de configuración. Los archivos php.ini en los dos servidores se ven relativamente iguales. Cada uno tiene las mismas bibliotecas PDO habilitadas con las mismas opciones configuradas.

¿Alguien tiene alguna idea de por qué esto podría estar pasando?

+0

Por favor, no editar su pregunta decir que haya resuelto su problema. Seleccione su respuesta como la respuesta aceptada a continuación. –

Respuesta

16

Resulta que era un problema mucho más simple de lo que pensaba. Por alguna razón, el servidor de desarrollo no estaba usando el puerto 1433 como el puerto predeterminado en la conexión y estaba usando el puerto 4000.

Descubrí esto habilitando los registros en el archivo freetds.conf y supervisándolos mientras estaba haciendo la solicitud.

Además, algo a tener en cuenta: La extensión DBLIB utiliza dos puntos (:) como separador entre el host y el puerto en lugar de la coma. Lamentablemente, el error que recibes cuando usas una coma no es muy descriptivo, así que es de esperar que alguien se beneficie de este descubrimiento.

3

puerto Escribir en freetds.conf directamente de este alojamiento:

[RemoteServer] 
    host = RemoteServer 
    port = 1433 

Y déjenos php-código es:

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