¡Hola a todos! Las versiones más actuales de PHP son de la 7 en adelante, y es un hecho que la extensión mssql que se usaba antes en la versión PHP 5.6 (para abajo…) ya es totalmente obsoleta; tanto así que ya no funcionan :'( (mssql_connect, mssql_query, etc.). Es por ésta razón que ahora ha cambiado la situación, y debemos de recurrir a drivers que nos permitan conectarnos a éste gestor de BD específico: Microsoft SQL Server.
Sí, sé que para muchos es como un «pecado» usar PHP para conectarse a SQL Server de Microsoft dado que para eso tenemos a MySQL, la cual es la fórmula perfecta, pero bueno… ya en los entornos laborales sí que es necesario éste tipo de conexiones con SQL Server.
Básicamente veremos sobre el driver para PHP para SQL Server que ha creado Microsoft, el cual permite la lectura y escritura de datos de SQL Server desde scripts PHP. La extensión SQLSRV proporciona una interfaz de procedimiento, mientras que la extensión PDO_SQLSRV implementa PDO para acceder a los datos en todas las ediciones de SQL Server 2008 R2 y posterior (incluido SQL DB de Azure).
Lo primero, es tener el entorno adecuado, o sea, la plataforma LAMP instalada, la cual la podemos instalar fácilmente con tasksel.
sudo apt install tasksel sudo tasksel
Solo seleccionamos (chequeamos con el espacio de barra) «LAMP Server» y Aceptamos la instalación.
Ya con esto, tenemos la base. Ahora instalaremos algunos otros paquetes (pre-requisitos); agregamos a nuestros orígenes de software la cuenta GitHub de microsoft, instalamos los paquetes principales de los drivers, actualizamos la variable de entorno PATH y pues ya con esto tenemos la instalación inicial. A continuación, las líneas de código hasta ahorita:
sudo apt install mcrypt php7.0-mcrypt php-mbstring php-pear php7.0-dev php7.0-xml curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add - curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list > /etc/apt/sources.list.d/mssql-release.list sudo apt-get update sudo ACCEPT_EULA=Y apt-get install msodbcsql mssql-tools sudo apt-get install unixodbc-dev echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc source ~/.bashrc
Continuando, se instalará los drivers/extensión de php propiamente. Se realizarán varias configuraciones que, para facilitar la vida al usuario de tener que abrir el archivo, buscar un parámetro, agregar/modificar algo, etc., nos lo ponen fácil con una (y más adelante también) línea de comando. También, hacemos uso de PECL (repositorio de extensiones PHP) para agregar las extensiones a PHP. Tomar en cuenta que éste tutorial lo hago en base a la documentación oficial del proyecto.
sudo pear config-set php_ini `php --ini | grep "Loaded Configuration" | sed -e "s|.*:\s*||"` system pecl install sqlsrv pecl install pdo_sqlsrv
Ahora se harán unas configuraciones en Apache (deshabilitar y habilitar unos módulos) y en el archivo de configuración de php (php.ini) para que todo funcione bien.
a2dismod mpm_event a2enmod mpm_prefork a2enmod php7.0 echo "extension=sqlsrv.so" >> /etc/php/7.0/apache2/php.ini echo "extension=pdo_sqlsrv.so" >> /etc/php/7.0/apache2/php.ini
Finalmente, reiniciamos el servicio de apache2 y ya tendría que estar todo listo.
sudo systemctl restart apache2
Ahora, para hacer la prueba de fuego de que realmente se esté conectando a SQL Server, crearemos un archivo php con el siguiente contenido en /var/www/html/ (generalmente, en ésta ubicación se colocan los archivos a publicarse en Apache2).
prueba.php
<?php //Parámetros de conexión al SQL Server $serverName = "nombre_servidor"; $connectionOptions = array( "Database" => "nombre_base_de_datos", "Uid" => "usuario", "PWD" => "clave" ); //Establecimiento de la Conexión $conn = sqlsrv_connect( $serverName, $connectionOptions ); if( $conn === false ) { die( FormatErrors( sqlsrv_errors())); } //Agregamos la consulta aquí. Como es de prueba, veremos la versió del SQL $tsql= "SELECT @@Version as SQL_VERSION"; //Ejecutamos la consulta $getResults= sqlsrv_query( $conn, $tsql ); //Controlamos los errores if ( $getResults == FALSE ) die( FormatErrors( sqlsrv_errors())); ?> <h1> Resultados : </h1> <?php while ( $row = sqlsrv_fetch_array( $getResults, SQLSRV_FETCH_ASSOC )) { echo ( $row['SQL_VERSION']); echo ("<br/>"); } sqlsrv_free_stmt( $getResults ); function FormatErrors( $errors ) { /* Mostrar error. */ echo "Información del error: <br/>"; foreach ( $errors as $error ) { echo "SQLSTATE: ".$error['SQLSTATE']."<br/>"; echo "Código: ".$error['code']."<br/>"; echo "Mensaje: ".$error['message']."<br/>"; } } ?>
Nos vamos al navegador y colocamos la URL respectiva (por ejemplo http://localhost/prueba.php). Debería de aparecer algo parecido a esto:
Y con esta ¡ya estamos listos para desarrollar!.
¡Saludos!
MI estimado y cómo se haría si estamos usando xampp ?
estimado como podría hacer lo mismo pero llamando un store procedure?
Hola. Es bien complejo explicarlo, pero te mando una url con info https://docs.microsoft.com/en-us/sql/connect/php/how-to-retrieve-output-parameters-using-the-sqlsrv-driver?view=sql-server-2017
Me funciono bien todo. Gracias por compartir!!!!! 🙂