2009-01-22 41 views
5

estoy usando el código actual en el intento de acceder a una base de datos MSSQL 2005:No se puede conectar a la base de datos de MSSQL a través de PHP

<?php 
$myServer = "[server]"; 
$myUser = "[username]"; 
$myPass = "[password]"; 
$myDB = "[db]"; 

//connection to the database 
$dbhandle = mssql_connect($myServer, $myUser, $myPass) 
    or die("Couldn't connect to SQL Server on $myServer"); 

//select a database to work with 
$selected = mssql_select_db($myDB, $dbhandle) 
    or die("Couldn't open database $myDB"); 

//declare the SQL statement that will query the database 
$query = "SELECT id, name, year "; 
$query .= "FROM cars "; 
$query .= "WHERE name='BMW'"; 

//execute the SQL query and return records 
$result = mssql_query($query); 

$numRows = mssql_num_rows($result); 
echo "<h1>" . $numRows . " Row" . ($numRows == 1 ? "" : "s") . " Returned </h1>"; 

//display the results 
while($row = mssql_fetch_array($result)) 
{ 
    echo "<li>" . $row["id"] . $row["name"] . $row["year"] . "</li>"; 
} 
//close the connection 
mssql_close($dbhandle); 
?> 

Se devuelve el siguiente:

Warning: mssql_connect() [function.mssql-connect]: Unable to connect to server: XXXXXXX in D:\xxxxx.xxx\xxxx.php on line 16 
Couldn't connect to SQL Server on XXXXXXX 

¿Qué le parece ¿el problema es?

Respuesta

0

Credenciales no válidas, si no está utilizando localhost, asegúrese de agregar la IP del servidor a la lista segura.

4

intente llamar mssql_get_last_message() para obtener el último mensaje de error:

$dbhandle = mssql_connect($myServer, $myUser, $myPass) 
    or die("Couldn't connect to SQL Server on $myServer. Error: " . mssql_get_last_message()); 
+3

mssql_get_last_message() obtiene el último mensaje que envió el servidor sql. si no puede conectarse ... no hay mensaje. esto no ayudará a una conexión perdida. ¿Cómo encontramos mensajes de error de conexión como "contraseña incorrecta", "host desconocido" o "usuario desconocido"? - [edit] en realidad, veo que esto es bastante estándar para los intentos de conexión. entonces, ¿qué significa cuando mssql_get_last_message() no devuelve nada en un intento de conexión? – changokun

5

Me suena como uno de sus DLL es la versión incorrecta. Hubo un problema de algún tipo con el cambio de SQL2000 a SQL2005 que los creadores de PHP no resolvieron solos. Hay una variedad de publicaciones al respecto aquí: the following link

Creo que la DLL es ntwdblib.dll y la versión necesita ser la versión 2000.80.194.0 como mínimo. Si está ejecutando Apache o WampServer, existe una DLL idéntica donde se almacenan los archivos DLL de Apache que deben sobrescribirse.

Nota: tuve este problema hace unos días y encontrar las DLL correctas y sobrescribir ambos permitieron que funcionara.

También: Es posible que deba configurar conexiones remotas. Sql Server 2005 tiene conexiones remotas deshabilitadas por defecto. Puede permitir conexiones remotas ejecutando la utilidad de Configuración del Área de Superficie SQL.

+0

En segundo lugar la moción, puede consultar este enlace: http://bugs.php.net/bug.php?id=40034 –

0

Tuve algunas dificultades con esto hace unos meses, y descubrí que la única forma de hacerlo funcionar era incluir el nombre de la instancia al especificar el servidor. Por ejemplo:

$myServer = "SERVER\INSTANCENAME"; 

La especificación de solo el servidor no funcionaría, incluso con TCP/IP habilitado.

0

Primero intente hacer algo como phpinfo() en su navegador, que ver qué bases de datos están permitidas.

Si no ve nada como mssql, entonces no está configurado. A fin de utilizar el odbc_connect() que será configurado ... la cadena de conexión será de la siguiente manera:

$server = ''; 
$user = ''; 
$password = ''; 
$database = ''; 
$connection = odbc_connect("Driver={SQL Server Native Client `11.0};Server=$server;Database=$database;", $user, $password);` 

Si está utilizando MSSQL 2005 o 2008, a continuación, cambiar d 11.0 a 10.0 y para otras versiones acaba de cambiar a la versión de tu mssql.

1

parada usando

mssql_connect

y comenzar a usar

sqlsrv_connect

que le ahorrará muchos dolores de cabeza. Además, la función * mssql_connect * ha quedado obsoleta.Para utilizar sqlsrv_connect, debe descargar el controlador e instalarlo como una extensión para que PHP reconozca las funciones sqlsrv. Descargar el controlador desde Microsoft Download Center (búsqueda de "SQL Server controlador php"), en el momento de este post la URL de descarga era: http://www.microsoft.com/en-us/download/details.aspx?id=20098

Los pasos correctos para la instalación se explican claramente por la propia Microsoft en http://www.microsoft.com/en-us/download/details.aspx?id=20098

  1. descargue el controlador. 2. ponerlo en la carpeta de extensión de PHP. 3. actualizar php.ini 4. reiniciar el servidor.

Después de instalar el controlador del servidor sql, simplemente siga las instrucciones desde http://www.php.net/manual/en/function.sqlsrv-connect.php. Debajo de un fragmento rápido:

<?php 
$serverName = "serverName\sqlexpress"; //serverName\instanceName 

// Since UID and PWD are not specified in the $connectionInfo array, 
// The connection will be attempted using Windows Authentication. 
$connectionInfo = array("Database"=>"dbName"); 
$conn = sqlsrv_connect($serverName, $connectionInfo); 

if($conn) { 
    echo "Connection established.<br />"; 
}else{ 
    echo "Connection could not be established.<br />"; 
    die(print_r(sqlsrv_errors(), true)); 
} 
?> 

¡Vota!

+0

El dubugger se cuelga cuando se encuentra con 'sqlsrv_connect ($ serverName, $ connectionInfo)' También tengo publicó una consulta relacionada con este http://stackoverflow.com/questions/32270877/what-it-takes-a-php-application-to-connect-to-mssql-server ¿Cuál podría ser el motivo del bloqueo? –

+0

mysql_connect() está en desuso, no mssql_connect() – broderickga

+0

mssql_connect() no está en desuso – Developer

0

Última respuesta, pero podría ayudar a alguien. casi hemos llegado, es el problema con los parámetros de conexión, probable que necesita para dar nombre de servidor como IP:port

ServerName :: El servidor MS SQL. p.ej. hostname:port (Linux), or hostname,port (Windows).

servidor de nombres debe ser "servidor \ instancia" Una instancia no es más que la dirección del puerto específica diferente a 1.433 ... por lo que sólo descubre el puerto en el servidor de MSSQL y luego tratar de conectarse a través de: ip:port

ejemplo de código que funciona completamente bien para mí ::

ini_set('display_errors', '1'); 
    // $myServer = "winsrv22.somedns.co.uk:22320";//this style works as well 
    $servername = "123.21.47.23:22320"; 
    $myUser = "UserName"; 
    $myPass = 'xxxxxxxx'; 
    $myDB = "[database]"; 

    //connection to the database 
    $dbhandle = mssql_connect($servername, $myUser, $myPass) 
     or die("Couldn'tt connect to SQL Server on $myServer"); 
    if($dbhandle) { 
    echo "Success, Connected\r\n"; 
    } else { 
     echo "problem :(\r\n"; 
    } 

Espero que esto ayude a alguien :) de codificación feliz !!

Cuestiones relacionadas