¡Hola, chicos!
¿Todo bien?

En esta publicación, me gustaría demostrar cómo conectarse a SQL Server usando PHP (Xampp) y el controlador PDO en Windows. Muchas personas acaban teniendo dificultades para instalar y configurar los drivers, debido a pequeños detalles técnicos que acaban no siendo observados e imposibilitando la conexión entre PHP y la base de datos SQL Server.

El primer paso para lograr esta conexión es descargar el controlador ODBC de Microsoft® 18.2.1.1 para SQL Server® a su máquina e instale el controlador.

El siguiente paso es ver información sobre su entorno. Para hacer esto, cree un archivo llamado phpinfo.php en la raíz de su servidor web PHP (el directorio predeterminado es C:\xampp\htdocs), con el siguiente contenido:

<?php
    phpinfo();
?>

Después de ver este archivo en su navegador web (http://localhost/phpinfo.php), debería ver una pantalla como esta:

En esta pantalla, necesitamos identificar las siguientes variables de entorno:

  • Versión de PHP (en el caso de ejemplo, 7.1.1)
  • Arquitectura PHP (en el caso de ejemplo, x86)
  • Ubicación del archivo de configuración (php.ini)
  • Compruebe si la versión de compilación de PHP es TS (Thread-safe) o NTS (Non Thread-safe) (en el caso del ejemplo, es TS)

Luego de identificar esta información, ahora descarguemos los Drivers de Microsoft para PHP para SQL Server, según su versión de PHP:

Relación entre la versión del controlador y la versión de PHP

Versión del controladorversión PHPDescarga del controlador
5.11.0-beta1PHP 7.4 a PHP 8.2para bajar
5.10.1PHP 7.4 a PHP 8.1para bajar
5.9PHP 7.3 a PHP 8.0para bajar
5.8PHP 7.2 a PHP 7.4para bajar
4.3PHP 7.0 y PHP 7.1para bajar
4.0PHP 7.0para bajar
3.2PHP 5.6.4+ o PHP 5.5.16+ o PHP 5.4.32para bajar
3.1PHP 5.5.16+ o PHP 5.4.32para bajar
3.0PHP 5.4.32 o PHP 5.3.0para bajar
2.0PHP 5.3.0 o PHP 5.2.4 o PHP 5.2.13para bajar

Relación entre la versión del controlador y la versión del controlador ODBC

Haga clic aquí para ampliar

Relación entre la versión del controlador y la versión de la base de datos

Haga clic aquí para ampliar
Versión del controladorVersión de la base de datos
4.3SQL Server 2008 R2 y superior
4.0Servidor SQL 2008 y superior
3.1Servidor SQL 2008 y superior
2.0 y 3.0Servidor SQL 2005 y superior

Relación entre la versión del controlador y la versión de Windows

Haga clic aquí para ampliar
Versión del controladorVersión del sistema operativo
5.11Servidor Windows 2012
Servidor Windows 2012 R2
Servidor Windows 2016
ventana 8
Ventanas 8.1
ventanas 10
ventanas 11

CentOS 7
Ubuntu 20.04, 20.10 y 21.04, 21.10
Debian 9, 10 y 11
Red Hat Enterprise Linux 7 y 8
SUSE 12 y 15

macOS Catalina, Mojave, Big Sur y Monterey
(Compatible con Apple M1 ARM64)
5.10.1Servidor Windows 2012
Servidor Windows 2012 R2
Servidor Windows 2016
ventana 8
Ventanas 8.1
ventanas 10
ventanas 11

CentOS 7
Ubuntu 20.04, 20.10, 21.04 y 21.10
Debian 9, 10 y 11
Red Hat Enterprise Linux 7 y 8
SUSE 12 y 15

macOS Catalina, Mojave, Big Sur y Monterey
(Compatible con Apple M1 ARM64)
5.9Servidor Windows 2012
Servidor Windows 2012 R2
Servidor Windows 2016
ventana 8
Ventanas 8.1
ventanas 10
ventanas 11

CentOS 7
Ubuntu 16.04, 20.04 y 20.10
Debian 9 y 10
Red Hat Enterprise Linux 7 y 8
SUSE 12 y 15

macOS Catalina, Mojave y Big Sur
5.8Servidor Windows 2012
Servidor Windows 2012 R2
Servidor Windows 2016
ventana 8
Ventanas 8.1
ventanas 10
ventanas 11

CentOS 7
Ubuntu 16.04 y 19.10
Debian 8 y 9 y 10
Red Hat Enterprise Linux 7 y 8
SUSE 12 y 15

macOS High Sierra, Catalina y Mojave
4.3Servidor Windows 2012
Servidor Windows 2012 R2
Servidor Windows 2016
ventana 8
Ventanas 8.1
ventanas 10
CentOS 7
Ubuntu 15.10 (64 bits)
Ubuntu 16.04 (64 bits)
Debian 8 (64 bits)
Red Hat Enterprise Linux 7 (64 bits)
Mac OS Sierra (64 bits)
Mac OS El Capitán (64 bits)
4.0Servidor Windows 2008 SP2
Servidor Windows 2008 R2 SP1
Servidor Windows 2012
Servidor Windows 2012 R2
Windows Vista SP2
Windows 7 SP1
ventana 8
Ventanas 8.1
ventanas 10
Ubuntu 15.04 (64 bits)
Ubuntu 16.04 (64 bits)
Red Hat Enterprise Linux 7 (64 bits)
3.2 y 3.1Servidor Windows 2008 R2 SP1
Windows Vista SP2
Servidor Windows 2008 SP2
Windows 7 SP1
Servidor Windows 2012
Servidor Windows 2012 R2
ventana 8
Ventanas 8.1
3.0Servidor Windows 2008 R2 SP1
Windows Vista SP2
Servidor Windows 2008 SP2
Windows 7 SP1
2.0Paquete de servicio 1 de Windows Server 2003
Paquete de servicio 3 de Windows XP
Windows Vista Service Pack 1 o posterior
Servidor Windows 2008
Servidor Windows 2008 R2
ventana 7

Luego de identificar la versión correcta del controlador según su versión de PHP, SQL Server y Sistema Operativo, descargue el controlador indicado y elija una carpeta para extraer los archivos durante la instalación.

Después de eso, copie todos los archivos que se instalaron en el directorio. php\ext en su instalación de Xampp (el directorio predeterminado es C:\xampp\php\ext)

Si no conoce la ruta de su archivo de configuración (la ruta predeterminada es C:\xampp\php\php.ini), en la pantalla phpinfo(), que se muestra arriba, puede identificar la ruta correcta de su archivo php.ini buscando Archivo de configuración cargado

Después de copiar todos los archivos, edite el archivo php.ini de su instalación y agregue los registros a continuación:
extension=php_pdo_sqlsrv_71_ts_x86.dll
extension=php_sqlsrv_71_ts_x86.dll

Recordando que el nombre de las DLL varía según la versión de PHP (71, 70, 54, etc.), Thread-safe (TS o NTS) y arquitectura (X86 o X64) y SIEMPRE debe ser el mismo que el nombre de los archivos que descargaste y copiaste en el directorio php\ext.

Una vez que haya editado el archivo php.ini, simplemente reinicie Apache para que los cambios surtan efecto, como se muestra a continuación:

Abra el archivo phpinfo.php nuevamente (http://localhost/phpinfo.php) y vea si el controlador ahora está cargado:

Si es el mismo que en la captura de pantalla, significa que el controlador está instalado y listo para usarse.

Guión de prueba de conexión

<?php

try
{

    $servidor = "vm-dba";
    $instancia = "sql2016";
    $porta = 1433;
    $database = "master";
    $usuario = "usuario_php";
    $senha = "123456";
    
    $conexao = new PDO( "sqlsrv:Server={$servidor}\\{$instancia},{$porta};Database={$database}", $usuario, $senha );
}
catch ( PDOException $e )
{
    echo "Drivers disponiveis: " . implode( ",", PDO::getAvailableDrivers() );
    echo "\nErro: " . $e->getMessage();
    exit;
}

$query = $conexao->prepare( "select @@version" );
$query->execute();

$resultado = $query->fetchAll();

echo $resultado['0']['0'];

unset( $conexao );
unset( $query );

Resultado:

¡Eso es todo!
Espero que hayas disfrutado de este artículo y que ahora puedas comenzar a crear aplicaciones usando PHP y SQL Server.

También hay un enlace muy interesante, de la propia Microsoft, que ayuda a los desarrolladores a crear un entorno PHP. Para acceder a esta documentación, haga clic en este enlace aquí.

¡Gran abrazo!