Migración de PHP7: el caso de SQL Server

Actualmente probando una migración a PHP7 (desde PHP5.5), noté que desapareció la gestión de conexiones a SQL Server a través de funciones nativas (mssql_). Usando conexiones a MySQL y SQL Server a través de nuestras aplicaciones PHP, tuve que investigar la cuestión para ver cuáles eran las posibles soluciones para reemplazar estas funciones nativas.

migración de PHP7

migración de PHP7

PHP7 se lanzó hace varios meses y está integrado de forma predeterminada, por ejemplo, en Ubuntu 16.04. Entonces decidimos probar una migración de Ubuntu 14.04 a Ubuntu 16.04, con una migración a PHP7. Nos convencieron, entre otras cosas, los muy halagadores benchmarks de PHP7 y también las novedades muy interesantes de PHP7 en cuanto a posibilidades de escritura .
Otro punto también, la migración a PHP7 normalmente es bastante simple. La principal novedad se refiere a la revisión profunda del motor para mejorar el rendimiento.

Desaparición de funciones nativas de SQL Server

Pocas cosas cambian con esta migración a PHP7, pero mirando la documentación oficial vemos que están desapareciendo varias extensiones, incluidas las funciones de mssql.
Los demás, como ereg y mysql, ya estaban en desuso en varias versiones. Estas funciones de mssql le permiten conectarse e iniciar consultas o procedimientos almacenados en un servidor SQL. En nuestro caso es muy útil porque tenemos bases de datos MySQL y también bases de datos SQL Server. Por lo tanto, es un punto que puede bloquearnos si alguna vez no encontramos un equivalente.

Pistas de reemplazo

Si miramos la documentación oficial, por ejemplo la de la mssql_connect , vemos que son posibles 3 opciones:

  • Ir a través de DOP
  • Utilice la función sqlsrv_connect
  • Ir a través de ODBC

En cualquier caso, es más restrictivo que las funciones nativas. Porque con PDO será necesario pasar por un piloto ODBC (así se une a la solución 3) Finalmente, se instala sqlsrv_connect en entorno Windows (DLL bajo IIS).

Por lo tanto, la conclusión es que cualquiera que sea la solución que se elija, en cualquier caso será más restrictiva que una solución puramente nativa. Después, la idea ahora es hacerlo lo más transparente posible. Y lo más estable posible también, porque es un entorno de producción.

Continuando con mi investigación, encontré un paquete, mantenido por Meet Bhagdev , que proporciona un todo en uno que parece interesante. Está disponible en un github .
La instalación no es muy complicada.
En una instalación funcional, con Apache y PHP ya, todo se reduce a obtener los paquetes correctos, el administrador ODBC y las extensiones para PHP. En resumen, estos son los comandos que tuve que ejecutar (por lo tanto, en Ubuntu 16.04):

wget https://github.com/Microsoft/msphpsql/blob/PHP-7.0-Linux/ODBC%20install%20scripts/installodbc_ubuntu.sh sudo sh installodbc_ubuntu.sh sudo apt-get install php libapache2-mod-php sudo apt-get instalar php-pear php-dev sudo pecl buscar sqlsrv sudo pecl instalar sqlsrv-4.0.5 sudo pecl instalar pdo_sqlsrv-4.0.5

Esto tiene el efecto de configurar una extensión de PHP, con todo lo necesario para comunicarse con un servidor SQL.

Lo último que hizo fue activar la extensión en el php.ini agregando estas líneas:

[SQLServer] extensión=/usr/lib/php/20151012/sqlsrv.so

Y el truco estaba hecho.

Esto luego da acceso, bajo Linux, a las diversas funciones sqlsrv_ que se describen en la documentación . Funcionará igual que en un IIS.

Por ejemplo, para una conexión a un servidor SQL Server:

$connectionInfo = array( "Database"=>$this->dbname, "UID"=>$this->dbuser, "PWD"=>$this->dbpass); $this->sqlLink = sqlsrv_connect ($this->dbhost, $connectionInfo); 

Continuación de las pruebas

Por ahora, me he ido con esta solución.
Parece muy bueno, pero aún no he terminado mis diversas pruebas.
En cualquier caso, pude llamar consultas, actualizar datos, lanzar procedimientos almacenados sin problemas. Todavía no he probado, por ejemplo, consultas con OpenQuery para ver cómo se ve. Actualizaré esta publicación de acuerdo con el resultado de mis pruebas.

Por su parte, si tiene otras ideas o mejores pistas, no dude en reaccionar en los comentarios a continuación.

Deja una respuesta