sqlsrv_connect - php sql server connection
No se puede conectar a la base de datos msSQL a través de PHP (8)
Estoy usando el código actual para intentar acceder a un db msSQL 2005:
<?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);
?>
Está devolviendo lo 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
¿Cuál crees que es el problema?
Credenciales no válidas, si no está utilizando localhost, asegúrese de agregar la dirección IP del servidor a la lista segura.
Intente llamar a 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());
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";
Especificar solo el servidor no funcionaría, incluso con TCP / IP habilitado.
Primero intente hacer algo como phpinfo()
en su navegador, que ver qué bases de datos están permitidas.
Si no ve algo como mssql
entonces no está configurado. Entonces usa el odbc_connect()
que se configurará ... tu cadena de conexión será así:
$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, entonces cambie d 11.0 a 10.0 y para otras versiones simplemente cambie a la versión de su mssql.
dejar de usar
mssql_connect
y comienza a usar
sqlsrv_connect
Eso te ahorrará muchos dolores de cabeza. Además, la función * mssql_connect * ha quedado obsoleta.
Para usar sqlsrv_connect, debe descargar el controlador e instalarlo como una extensión para que PHP reconozca las funciones de sqlsrv . Descargue el controlador del Centro de descarga de Microsoft (busque "controlador php del servidor sql"), en el momento de esta publicación, la URL de descarga era: http://www.microsoft.com/en-us/download/details.aspx?id = 20098
Microsoft explica claramente los pasos correctos para la instalación en http://www.microsoft.com/en-us/download/details.aspx?id=20098
- descarga el driver 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 de 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 arriba!
Descargue el controlador en este sitio http://www.microsoft.com/en-us/download/details.aspx?id=20098 , luego abra su archivo php.ini y agregue la DLL que descarga.
Respuesta tardía, pero podría ayudar a alguien. ya casi llegamos, es el problema con los parámetros de conexión, probablemente necesites dar el nombre de servidor como IP:port
servername :: El servidor MS SQL. ej. hostname:port (Linux), or hostname,port (Windows).
El nombre del servidor debe ser "server / instance". Una instancia no es más que una dirección de puerto específica diferente de 1433 ... así que simplemente descubre el puerto en el servidor mssql y luego intenta conectar usando: ip:port
Código de ejemplo 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 :) ¡Feliz codificación!
Me parece que una de tus 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í: el siguiente enlace
Creo que el 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.
Además: 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.