Acceso a SQLServer desde Ubuntu

Para acceder a una base de datos SQLServer o Sybase la mejor opción es instalar los drivers TDS (Tabular Data Stream) http://en.wikipedia.org/wiki/Tabular_Data_Stream.

Hay que recordar que SQLServer de Microsoft es una versión propia de la base de datos de Sybase, por lo que comparte algunas de sus características, entre las cuales se encuentra la posibilidad de acceder a ellas mediante el driver TDS de ODBC.

Instalación de paquetes

Instalamos tdsodbc y también sqsh, que es un shell de consultas SQL pensado para sustituir al antiguo isql que se usaba originalmente para hacer querys a las bases de datos de Sybase.

$ sudo apt-get install libsybdb5 freetds-common php5-sybase sqsh unixodbc unixodbc-bin tdsodbc
/etc/init.d/apache2 restart

Ficheros de configuración

/etc/odbcinst.ini

[ODBC Drivers]
     TDS = Installed

[TDS]
     Driver = /usr/lib/odbc/libtdsodbc.so
     Setup = /usr/lib/odbc/libtdsS.so

/etc/odbc.ini

[ODBC Data Sources]
     SQLSERVER_ODBC = TDS

[SQLSERVER_ODBC]
     Driver = /usr/lib/odbc/libtdsodbc.so
     Description = Test ODBC
     Host = localhost
     ServerType = SQLServer
     FetchBufferSize = 00
     Username = UserHM
     UID = UserHM
     Password = HMuser8520
     Database = HostMonitor
     ServerOptions =
     ConnectOptions =
     Options =
     ReadOnly = no

/etc/freetds/freetds.conf

[global]
     # TDS protocol version
     tds version = 4.2

[SQLSERVER_TDS]
     # Version 8.0 para SQL Server 2000
     # Version 7.0 para SQL Server 7
     # Version 6.0 para SQL Server 6
     host = 194.179.23.1
     port = 1433
     tds version = 8.0

Prueba de conectividad TDS

$ sqsh -S 194.179.23.1 -U usuario -P password -D database
sqsh-2.1 Copyright (C) 1995-2001 Scott C. Gray
This is free software with ABSOLUTELY NO WARRANTY
For more information type 'warranty'
1>

Prueba de conectividad ODBC

$ isql -v SQLSERVER_ODBC usuario password
+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
SQL>

Acceso desde PHP

$sock=mssql_connect("SQLSERVER_TDS","usuario","password");
mssql_select_db("database",$sock);
$SQL = "select * from tabla";
$result= mssql_query($SQL);
while ($row = mssql_fetch_array($result)) {
        echo $row['id_tabla'] . " " . $row['campo1'] . " " . $row['campo2'] . "n";
}