Quieres realizar una conexión con php para visualizar, ejecutar y/o actualizar datos de una BD Microsoft SQL Server desde un servidor GNU/Linux Debian o Ubuntu, acá los pasos para realizarlo.
1. Instala vía apt-get o aptitude los siguientes programas:
1.1 sudo apt-get install php5-odbc
php5-odbc: Modulo ODBC para php5.
1.2 sudo apt-get install unixodbc unixodbc-dev freetds-dev sqsh tdsodbc
unixodbc: Biblioteca de herramientas ODBC.
unixodbc-dev: Bibliotecas ODBC para unix.
freetds-dev: MS SQL and Sybase client library (static libs and headers).
sqsh: cliente de SQL en línea de órdenes para servidores MS SQL y Sybase
tdsodbc: Controlador ODBC para conectar servidores MS SQL y Sybase
1.3 sudo aptitude install unixodbc-bin
unixodbc-bin: Herramientas gráficas para la gestión y navegación por ODBC.
Nota: Si por algún motivo te da error al descargar e instalar el paquete sqsh en tu equipo por "error al descargar el paquete "libct4", descargalo desde el repositorio de tu distribución GNU/Linux e instalalo 1ro de esta forma:
dpkg -i libct4_0.82-7_i386.deb. Luego, instala sqsh.
2. Al instalar todos los paquetes, agrega al final del archivo /etc/freetds/freetds.conf las siguientes lineas:
[sqlserver]
host = 192.168.1.1
port = 1433
tds version = 8.0
Donde, [sqlserver] es el nombre que le estás dando a la conexión freetds, host es la ip del servidor MS SQL Server, port es el puerto de comunicación MS SQL Server y tds version es la versión de tds usada. Para el caso de MS SQL Server 2005, el tds version corresponde a 8.0
Product | TDS Version | Comment |
Sybase before System 10, Microsoft SQL Server 6.x | 4.2 | Still works with all products, subject to its limitations. |
Sybase System 10 and above | 5.0 | Still the most current protocol used by Sybase. |
Sybase System SQL Anywhere | 5.0 only | Originally Watcom SQL Server, a completely separate codebase. Our best information is that SQL Anywhere first supported TDS in version 5.5.03 using the OpenServer Gateway (OSG), and native TDS 5.0 support arrived with version 6.0. |
Microsoft SQL Server 7.0 | 7.0 | Includes support for the extended datatypes in SQL Server 7.0 (such as char/varchar fields of more than 255 characters), and support for Unicode. |
Microsoft SQL Server 2000 | 7.1 | Include support for bigint (64 bit integers), variant and collation on all fields. Collation is not widely used. |
Microsoft SQL Server 2005 | 7.2 | Includes support for varchar(max), varbinary(max), xml datatypes and MARS. |
Microsoft SQL Server 2008 | 7.2 (unchanged) | |
Notes: |
3). Prueba de conexión vía sqsh:
sqsh -S sqlserver -U el_usuarioBD -P el_passwordBD
sqsh -S 192.168.1.1 -U el_usuarioBD -P el_passwordBD
3.1) Prueba de select (En el prompt de sqsh):
sqsh-2.1 Copyright (C) 1995-2001 Scott C. Gray
This is free software with ABSOLUTELY NO WARRANTY
For more information type '\warranty'
1> select * from bd.dbo.tabla
2> go
id_primer descripcion mensaje es_fijo
passport
----------- --------------------------------------------- --------------------------------------------- -----------
---------------------------------------------
1 Mensaje Personalizado |s| 0
1
2 Mensaje fijo Mensaje fijo 1
1
3 Mensaje con 2 parametros Mensaje |s| y |s| 0
1
(3 rows affected)
1>
5). Agregar el siguiente contenido al archivo /etc/odbc.ini:
[datasourcename]
Driver = FreeTDS
Description = ODBC connection via FreeTDS
Trace = No
Servername = sqlserver
Database = mb_sms
Donde "[datasourcename]" es el nombre de la entrada que se está configurando, "Servername" es el nombre de la entra freetds configurada en el archivo /etc/freetds/freetds.conf y "Database" es el nombre de la bd en MS SQL Server a la cual deseo realizar la conexión.
6). Agregar el siguiente contenido al archivo /etc/odbcinst.ini:
[FreeTDS]
Description = TDS driver (Sybase/MS SQL)
Driver = /usr/lib/odbc/libtdsodbc.so
Setup = /usr/lib/odbc/libtdsS.so
CPTimeout =
CPReuse =
FileUsage = 1
7). Realiza un test de conexion usando isql:
isql -v datasourcename el_usuarioBD el_passwordBD
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
SQL>
7.1) Prueba de select (En el prompt de isql):
use bd
select * from tabla
SQL> select * from tabla
+------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| id_primer | descripcion | mensaje | es_fijo | passport |
+------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| 1 | Mensaje Personalizado | |s| | 0 | 1 |
| 2 | Mensaje fijo | Mensaje fijo | 1 | 1 |
| 3 | Mensaje con 2 parametros | Mensaje |s| y |s| | 0 | 1 |
+------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
SQLRowCount returns 3
3 rows fetched
SQL>
8). Por ultimo, ya puedes usar el origen de datos configurado [datasourcename] en PHP:
$connection = odbc_connect(‘datasourcename’, ‘username’, ‘password’);
if (!$connection) die(“Connection failed”);
else echo “works”;