Una guía para realizar una conexión a una base de datos SQL Server mediante el lenguaje de programación PHP, la cual me decidí a realizar debido a que no encontré mucha documentación para este curioso caso. 😉
Espero les sea de utilidad.
Entorno de trabajo:
- SQL Server 2008
- Servidor Independiente de Plataforma XAMPP (Apache) V3.1.0.3.1.0
- PHP Versión 5.4.7
- Windows 7
Primer Paso:
Debemos de descargar el driver oficial ofrecido por Microsoft, el cual se encuentra actualmente en su versión 3.0.
Lo pueden buscar en google o pueden acceder dando clic aquí.
Existen 2 versiones la 2.0 y la 3.0, ¿cuál usamos ? eso depende del Sistema Operativo que estemos utilizando, podemos ver las especificaciones, pongo la imágen de los requerimientos para el driver versión 3.0.
Después de descargar los driver pasamos a descomprimir la carpeta, la cual contiene 8 archivos con extensión .dll para la versión 5.3 y 5.4, además de unos pequeños instructivos.
¿ Qué archivos utilizaremos ?
Para ello podemos crear un fichero .php con la instrucción phpinfo(); para ver las caracterísitcas de la versión PHP que tengamos instalada. Este quedaría de la siguiente manera.
Abrimos con el navegador el fichero php para ver la información, de toda esa información nos interesan 2 cosas, que son las que nos servirán para identificar que ficheros .dll necesitamos. Las cuales son:
Compiler : en mi caso MSVC9 (Visual C++ 2008) .
Thread Safety: en mi caso su valor es enabled.
Dependiendo de esos dos valores elegimos los dos archivos dll que nos serviran, en mi caso:
php_pdo_sqlsrv_54_ts.dll
php_sqlsrv_54_ts.dll
54 por que mi versión PHP es la 5.4 y _ts por que mi versión PHP es thread safe ( Thread Safety enabled).
Después de borrar los dll que no me sirve me queda así.
Ahora que ya sabemos que archivos nos servirán debemos de pegarlos en la carpeta ext de php:
En mi caso la ruta es la siguiente: C:\xampp\php\ext
Hecho esto, debemos de habilitar esos drivers en el archivo de configuración de PHP, el archivo php.ini
Para abrimos el archivo con nuestro editor de texto favorito, nos situamos al final del documento y agregamos las siguientes líneas. Nuevamente recuerden que debe de tomar en cuenta su versión php (5.4 o 5.3) y si es thread safe o no lo es.
Para mi caso queda así:
Les dejo las posibles combinaciones para nuestro archivo de configuración dependiendo de la versión php y si son thread safe o no:
Hecho esto guardamos los cambios en el archivo php.ini y reiniciamos nuestro servicio de Apache.
Si consultamos la información mediante phpinfo() ya nos debe de aparecer el driver ya habilitado, de lo contrario debemos de revisar si hemos elegido bien los archivos .dll y haber escrito bien el archivo de configuración.
Realizando una consulta:
El driver proporcionado por Microsoft nos permite 2 tipos de autenticación:
- Autenticación de Windows
- Autenticación SQL Server
En el siguiente código muestro como acceder a una base de datos SQL Server mediante la autenticación de SQL Server.
<?php /* Nombre del servidor. */ $serverName = "(local)"; /* Usuario y clave. */ $uid = "juan"; $pwd = "123"; /* Array asociativo con la información de la conexion */ $connectionInfo = array( "UID"=>$uid, "PWD"=>$pwd, "Database"=>"BLOG"); /* Nos conectamos mediante la autenticación de SQL Server . */ $conn = sqlsrv_connect( $serverName, $connectionInfo); if( $conn === false ) { echo "No es posible conectarse al servidor.</br>"; die( print_r( sqlsrv_errors(), true)); } /* Query que nos mostrara el usuario con el que nos hemos conectado a la base de datos. */ $tsql = "SELECT CONVERT(varchar(32), SUSER_SNAME())"; $stmt = sqlsrv_query( $conn, $tsql); if( $stmt === false ) { echo "Error al ejecutar consulta.</br>"; die( print_r( sqlsrv_errors(), true)); } /* Mostramos el resultado. */ $row = sqlsrv_fetch_array($stmt); echo "User login: ".$row[0]."</br>"; /* Cerramos la conexión, muy importante. */ sqlsrv_free_stmt( $stmt); sqlsrv_close( $conn); ?>
Básicamente de esa manera logramos conectar PHP y SQL Server, la parte más complicada es saber que archivo dll necesitamos usar, espero que este tutorial les pueda servir de guía.
Sus aportaciones serán bienvenidas.
Saludos.
Juan Alberto.
Tengo un problema cree que me podria ayudar? al conectar SQL SERVER + PHP 5.4 , estoy utilizando WAMPSERVER.
He seguido los pasos correctamente.
Hola amigo. Cual es el problema ?
Buenas! Una consulta, que versión de XAMPP estás usando? Es posible hacer lo mismo usando WAMP?
Muy buen tutorial, excelentemente explicado, muchas gracias!
Saludos!
Asi es funciona utilizando también WAMP.
Saludos cordiales.!!
Ok! Voy a seguir intentando entonces porque hasta ahora no consigo hacerlo funcionar.
Muchas gracias por la pronta respuesta!
Saludos!
Fatal error: Call to undefined function sqlsrv_connect() in C:\wamp\www\conexion.php on line 13
Ese error me aparece al abrir el archivo php en en navegador.
ya verificaste el nombre del servidor y de la instancia
Hola quisiera saber como conectar Sql Server con php 5.5
Ya lo intente la librería .dll todavía no esta para esa versión de php
si quieres descargate esta distribución de apache XAMPP 1.8.2 tiene la versión de php 5.4.27
listo todo genial !!! ya tenia rato
Buenas noches, si por favor me pueden ayudar con SQL Server 2005 para hacer consultas con php 5.3. Instale para esto:
* Wampserver para obterner el servidor y la funciones de php:
– Wamp version 2.1: Apache2.2.17, php 5.3.5
* SQL 2005 server Express Edition: ExSQLEXPR_ADV_ESN.exe de http://www.microsoft.com/es-es/download/details.aspx?id=5897
* Microsoft SQL Server Management Studio Express: SQLServer2005_SSMSEE de http://www.microsoft.com/es-es/download/details.aspx?id=8961
* Necesito usar la libreria sqlsvr para la conexion de php y SQL server 2005
– Descargue la libreria SQLSRV 3.0. y SQLSRV 2.0 de http://msdn.microsoft.com/en-us/sqlserver/ff657782.aspx
Procedimiento realizado:
Instale el Wampserver, luego el SQL 2005 server Express Edition, Microsoft SQL Server Management Studio Express.
Configure parq que SQL acepte conexiones remotas: Me fui a SQL server Configuration Manager y coloque en ejecucion en Servicioes de SQLServer 2005 a SQL Server(SQLEXPRESS) Y Explorador de SQL Server. Luego me fui a Protocoloes de SQLEXPRESS habilite Canalizaciones con nombre y TCP/IP.
EN TCP/IP habilite los puerto dinamicos a 1433.
$basedatos, ‘UID’=>$usuario, ‘PWD’=>$pass);
$conexion = sqlsrv_connect($servidor, $info);
if(!$conexion){
die( print_r( sqlsrv_errors(), true));
}
echo ‘Conectado’;
?>
Use este código para probar la conexión y me daba un error que no existía la función sqlsrv_connect (), fue cuando descargue SQLSRV 2.0. y coloque los archivos php_sqlsrv_53_ts_vc6.dll y php_pdo_sqlsrv_53_ts_vc6.dll en la carpeta «C:\wamp\bin\php\php5.3.5\ext» y agregue las extensiones, esto viendo el phpinfo():
extension=php_sqlsrv_53_ts_vc6.dll
extension=php_pdo_sqlsrv_53_ts_vc6.dll
EL Error se corrigió pero me aparece otro error que es el siguiente:
Array ( [0] => Array ( [0] => IMSSP [SQLSTATE] => IMSSP [1] => -49 => -49 [2] => This extension requires either the Microsoft SQL Server 2008 Native Client (SP1 or later) or the Microsoft SQL Server 2008 R2Native Client ODBC Driver to communicate with SQL Server. Neither of those ODBC Drivers are currently installed. Access the following URL todownload the Microsoft SQL Server 2008 R2 Native Client ODBC driver for x86: http://go.microsoft.com/fwlink/?LinkId=163712 [message] => This extension requires either the Microsoft SQL Server 2008 Native Client (SP1 or later) or the Microsoft SQL Server 2008 R2 Native Client ODBC Driver to communicate with SQL Server. Neither of those ODBC Drivers are currently installed. Access the following URL to download the Microsoft
SQL Server 2008 R2 Native Client ODBC driver for x86:http://go.microsoft.com/fwlink/?LinkId=163712 ) [1] => Array ( [0] =>IM002 [SQLSTATE] => IM002 [1] => 0 => 0 [2] => [Microsoft][Administrador de controladores ODBC] No se encuentra el nombre del origen de datos y no se especificó ningún controlador predeterminado [message] => [Microsoft][Administrador de controladores ODBC] No se encuentra el nombre del origen de datos y no se especificó ningún controlador predeterminado ) )
Lo que entiendo es que falta Microsoft SQL Server 2008 Native Client (SP1 or later), leyendo la pagina oficial que
dice:
http://msdn.microsoft.com/en-us/library/cc296170.aspx
Lo que entiendo que necesito es el:
La versión 2.0 del controlador requiere Microsoft SQL Server 2008 R2 Native Client. Haga clic en el enlace correspondiente a continuación:
Descargue el paquete X86 <— Lo descargo este archivo (aqlncli.msi) lo instalo reinicio el wamp e intento correr el archivo php y me mantiene el mismo erro. Agradecería su respuesta. He leido de todo y nada para corregir, es para un proyecto en una materia en la universidad pero nada, Agradeceria su ayuda
Hola en que sistema operativo trabajas? mencionaste que trabajas con sql server 2005, descarga e instala este paquete: http://www.microsoft.com/en-us/download/details.aspx?id=15748
Saludos !!
hola buen dia, ya he realizado los pasos que describes en el tutorial, el problema es que mi wammp es de 64 bits y no carga las librerias tienes alguna solucion? gracias
Configurando una pc de 64 bits con windows 7 me paso lo mismo. para mi sorpresa el driver versión 2.0 me funcionó a la perfección.
Podrías probar.
Saludos
Hola, necesito hacer un sistema de login de usuarios, podrias ayudarme??
con gusto puedes indicarme una dirección para que te mande un pequeño ejemplo
Pues a mi me explotó por todos lados.
A pesar de que instalé todo, me aparece el error, y cito:
» Fatal error: Call to undefined function sqlsrv_connect() in C:\xampp\htdocs\test\index.php on line 11 »
Creo que debe ser por las versiones, ya que a tí con el phpinfo(); te muestra que está ejecutando
bajo la versión 2012 (raro)
Saludos!
Es curioso que ha mucho no les haya funcionado, lo cierto es que hace unos días hice una configuración en una computadora (windows 7 de 64 bits) y para mi sorporesa solo funcionó utilizando el driver 2.0!!
Saludos
Despues de pelear toda la tarde logre que funcionara con la version de xampp:
«xampp-win32-1.8.1-VC9-installer.exe» que esta en:
http://sourceforge.net/projects/xampp/files/XAMPP%20Windows/1.8.1/
y los drivers de mssql version 3.0, con sql server 2012, gracias por la info me salvo de quedarme un sabado a trabajar.
Excelente la Informacion. Gracias desde Caracas Venezuela.
David Rafael Blanco Leon.
Hola, este mismo funciona si estoy haciendo una pagina web y estoy usando SQL server en virtual box para guardar los datos?
hay alguna variacion en la configuracion con Windows 8 ?
Hola que tal, te felicito y te agradezo mucho por compartirnos esto,
queria consultarte lo siguiente,
es posible conectar una web echa en php y que esta consulte datos en una computadora local, (teniendo en cuenta que en la pc esta la base de datos sql server?).
Saludos
Hola que tal, gracias por el aporte, sabes como seria el código en caso que quiera consultar una tabla, o vista guardada en el sql, quiero decir si quisiera hacer un select * from usuarios y me devuelva todos los resultados en una tabla.
Hola amigo, exelente pagina veo que ayudas a muchos y ojala conmigo no sea diferente, tengo un problemon, sucede que tengo un sitio web desarrollado en joomla 3,0 en un hosting y necesito mostrar información en ella, de una base de datos desarrollada en Sql Server 2008, dicha base de datos está en un servidor local en mi casa ruego tu ayuda para saber como realizar la conexion de esta DB remota a mi sitio web con PHP. desde ya muchisimas gracias, quedo a esperas de tu respuesta.
Gilmar para lograr esto necesitas tener una ip publica, para que puedas acceder a tu base de datos desde internet.
Gracias por tu pronta respuesta pero quisiera saber si es mucha molestia, ¿cual el procedimento a seguir una vez teniendo la ip pública?.
Gracias por tu pronta respuesta pero quisiera saber si no es mucha molestia, ¿cual el procedimento a seguir una vez teniendo la ip pública?.
Muchísimas gracias!
Me da el siguiente error.
Me conecto al servidor de mi trabajo y no puedo llegar a ninguna tabla.
No es posible conectarse al servidor.
Array ( [0] => Array ( [0] => IMSSP [SQLSTATE] => IMSSP [1] => -49 [code] => -49 [2] => This extension requires the Microsoft SQL Server 2012 Native Client. Access the following URL to download the Microsoft SQL Server 2012 Native Client ODBC driver for x86: http://go.microsoft.com/fwlink/?LinkId=163712 [message] => This extension requires the Microsoft SQL Server 2012 Native Client. Access the following URL to download the Microsoft SQL Server 2012 Native Client ODBC driver for x86: http://go.microsoft.com/fwlink/?LinkId=163712 ) [1] => Array ( [0] => IM002 [SQLSTATE] => IM002 [1] => 0 [code] => 0 [2] => [Microsoft][Administrador de controladores ODBC] No se encuentra el nombre del origen de datos y no se especificó ningún controlador predeterminado [message] => [Microsoft][Administrador de controladores ODBC] No se encuentra el nombre del origen de datos y no se especificó ningún controlador predeterminado ) )
Desde ya gracias
que tal amigo, a mi me daba el mismo error y se soluciona instalando el ODBC
https://www.microsoft.com/en-us/download/details.aspx?id=36434
Con eso se soluciona.
Saludos…
Excelente aporte, muchas gracias 😀
Aunque es un poco antiguo aun sigue funcionando =) lo he usado y me parece excelente, cabe destacar que esto solo funciona para la version x32 pues segui los pases en una version de x64 y no me funciono(probado en una version php 5.5.12 utilizando los archivos: ;extension = php_sqlsrv_55_ts.dll;extension = php_pdo_sqlsrv_55_ts.dll, por si a alguien le sirve)
Estimado
Eres el unico Blog que explica realmente cual versión elegir y la forma de configurarlo. MUCHISIMAS GRACIAS!
eres el mejor, funciono al 100%
Busqué en muchos video tutoriales de YouTube y ninguno hacía referencia a la información que arroja phpinfo(), ya había probado todo lo de los videos y solamente con tu blog, pude resolverlo, GRACIAS!! (logré conectarme del servidor apache php 7 instalado en una portátil con win 10 64bits a otra PC con WIN 10 64bits donde esta el sql server 2014)