Configurar Conexión SQL Server con PHP (PHP + SQL Server 2008)

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:

  1. SQL Server 2008
  2. Servidor Independiente de Plataforma XAMPP (Apache) V3.1.0.3.1.0
  3. PHP Versión 5.4.7
  4. 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.

php sql server 1

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.

ficheros dll

¿ 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.

php info code

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) .

compiler

Thread Safety: en mi caso su valor es enabled.

ts

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í.

ficheros elegidos

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í:

php ini

Les dejo las posibles combinaciones para nuestro archivo de configuración dependiendo de la versión php y si son thread safe o no:

php ini 2

php ini 3

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.

finalRealizando una consulta:

El driver proporcionado por Microsoft nos permite 2 tipos de autenticación:

  1. Autenticación de Windows
  2. 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.

 

 

 

 

 

 

 

 

36 comentarios en “Configurar Conexión SQL Server con PHP (PHP + SQL Server 2008)

  1. Marcelo

    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!

    Responder
      1. Marcelo

        Ok! Voy a seguir intentando entonces porque hasta ahora no consigo hacerlo funcionar.

        Muchas gracias por la pronta respuesta!

        Saludos!

  2. Marcelo

    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.

    Responder
  3. luis

    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

    Responder
  4. No funcionó...

    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!

    Responder
  5. daniel

    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

    Responder
  6. DEMIAN ANGELEZ

    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.

    Responder
  7. Gilmar

    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.

    Responder
      1. Gilmar

        Gracias por tu pronta respuesta pero quisiera saber si es mucha molestia, ¿cual el procedimento a seguir una vez teniendo la ip pública?.

  8. Valeska

    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

    Responder
  9. ele angel

    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)

    Responder
  10. Marco Antonio Domínguez

    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)

    Responder

Replica a juan alberto Cancelar la respuesta