Base de datos · 3 min read · Oct 25, 2025

Acceso a PHP a una base de datos MSSQL desde Debian Etch con ODBC y FreeTDS

Acceso a PHP a una base de datos MSSQL desde Debian Etch con ODBC y FreeTDS

Esto asume que ya tienes Apache2 y PHP5 configurados correctamente en tu sistema. Mis esfuerzos para hacer que esta conexión funcionara se compilaron a partir de información encontrada en www.unixodbc.org y www.freetds.org. Estos pasos funcionaron para mí con un servidor web Apache2 con php5 ejecutándose en Debian Etch estable en octubre de 2007. El servidor SQL está ejecutando Microsoft SQL 2005 en un sistema operativo Windows 2003 Server.

En estas instrucciones asumo que has hecho su a una cuenta de root. También uso joe como mi editor, así que reemplázalo con tu editor de elección.

Primero instala los paquetes necesarios:

#apt-get install tdsodbc libct3 unixodbc php5-odbc

Esto debería descargar e instalar unixODBC, FreeTDS y las extensiones odbc para php5.

A continuación, creamos plantillas para registrar el controlador ODBC para FreeTDS y para crear el DSN ODBC para FreeTDS. Puedes poner estos archivos donde quieras, ya que usarás “odbcinst” para configurar realmente el sistema. Elegí alojarlos en /etc/freetds donde viven los archivos de configuración tds.

Registro del controlador ODBC:

#joe /etc/freetds/tds.driver.template

Luego pega esto en el editor:

[TDS]
Description     = Controlador FreeTDS para Linux y MSSQL en Win32
Driver          = /usr/lib/odbc/libtdsodbc.so
Setup           = /usr/lib/odbc/libtdsS.so

Ahora el DSN:

#joe /etc/freetds/tds.dsn.template

Luego pega esto en el editor:

[DSN_NAME]
Description     = Prueba a freeTDS
Driver          = TDS
Trace           = No
Database        = DefaultDatabase [reemplaza con el nombre de tu base de datos]
Server          = mysqlserver.inter.net [reemplaza con el host de tu servidor SQL]
Port            = 5050 [reemplaza con el puerto que SQL está escuchando]

Ok, ahora necesitas insertar estas plantillas en el sistema unixODBC:

#odbcinst -i -d -f /etc/freetds/tds.driver.template
#odbcinst -i -s -f /etc/freetds/tds.dsn.template

Un problema que tuve en este punto es que el DSN se instaló en la configuración personal de odbc de la cuenta root. Dado que no puedo iniciar sesión como www-data para ejecutar el comando de instalación del dsn, simplemente copié el archivo .odbc de root a /etc/odbc.ini, que es el archivo DSN de todo el sistema al que todos los usuarios pueden hacer referencia.

#mv /etc/odbc.ini /etc/odbc.ini.bak  [en caso de que tuvieras otros]
#cp /root/.odbc.ini /etc/odbc.ini

Ahora necesitas habilitar la extensión odbc en php editando tu archivo php.ini. A menos que hayas hecho algún tipo de compilación o instalación personalizada, el archivo ini de php debería estar en el directorio /etc/php5/apache2/, así que:

#joe /etc/php5/apache2/php.ini

La mejor práctica es agregar esto a la sección de extensiones del archivo php.ini:

extension = odbc.so

Ahora necesitas reiniciar Apache para que los cambios de php se reflejen en el sistema.

#/etc/init.d/apache2 restart

Eso debería ser todo. Suponiendo que tienes conectividad con la máquina MSSQL, deberías poder probar esta configuración usando isql. Usando la configuración anterior y un nombre de usuario de Bob con una contraseña de Marley, aquí está la prueba:

#isql -v DSN_NAME Bob Marley

Deberías obtener el aviso SQL> y puedes ejecutar cualquier comando select u otros que desees. Ahora pasemos a la parte de PHP. Todo lo que necesitas hacer (nuevamente asumiendo los ejemplos anteriores) es agregar la información de conexión a tu archivo php y comenzar a codificar. Lo siguiente es un ejemplo básico que, por supuesto, necesitarás adaptar a tus necesidades.

Si tienes problemas, comienza con la solución básica de problemas de red. Asegúrate de que puedes hacer ping al servidor desde tu caja Debian. Intenta telnetear al servidor y al puerto que MSSQL está escuchando. Si está funcionando, deberías obtener una pantalla en blanco de la que necesitas salir. Después de eso, si el ejemplo de isql funciona pero tu conexión php no, no estoy seguro de a dónde señalarte.

¡Buena suerte!

Share: X/Twitter LinkedIn

Recibe nuevas publicaciones en tu bandeja de entrada.

No spam. Cancela la suscripción en cualquier momento.