Ir al contenido principal

UnixODBC para la conexion MsSql con PHP en Linux Centos 5

Esta fue una de esas ideas locas de probar conexiones a MS SQL SERVER con PHP desde mi servidor web Linux mediante UnixODBC a un Servidor Windows.



Requerimiento
UnixODBC http://www.unixodbc.org/drivers.html
FreeTDS http://www.freetds.org
PHP http://www.php.net

Instalando UnixODBC
yum -y install unixODBC-GUI-Qt

En el encontre que necesitaba librerias *.so, para entablar una conexion usando un DSN, manos a la obra como dice en la pagina de unixodbc habia que instalar un FreeTDS

Instalando FreeTDS

yum -y install freetds*

ahora una vez instalado ya tenemos las librerias FreeTDS para hacer conexion con base de datos Sysbase y MsSql Server.

Configuración de Alias para las conexiones con FreeTds

Editamos el archivo freetds.conf, es en este archivo donde debemos agregar nuestros alias
que manejaremos para nuestras conexion a los diferentes servidores Ms SqlServer que tengamos en la red.
vi /etc/freetds.conf

#Esta es una tipica configuración Microsoft SQL Server 7.0
[MyServer70]
host = 172.16.0.253
port = 1433
tds version = 7.0
#Esta es una tipica configuración Microsoft SQL Server 2000
[MyServer2k]
host = 172.16.0.52
port = 1433
tds version = 8.0

Configuración Formato de Fechas

Editemos el archivo locales.conf, Es bastante comun que necesitemos configurar el manejo del formato de fechas en nuestro servidor, para que php nos devuelva el formato como mejor nos parezca.
vi /etc/locales.conf

[default]
date format = %d/%m/%Y %H:%M:%S
#[default_orig]
#date format = %b %d %Y %I:%M%p

Conectando con Tsql a nuestro servidor Ms SqlServer
vamos hacer una prueba de conexion usando Tsql, para probar nuestro alias con FreeTDS.
tsql -S myserver70 -p 1433 -U sa



Configurando UnixODBC

necesitamos configurar el archivo odbcinst.ini para referenciar las librerias y que estas puedan ser usadas a la hora de utilizar una conexion ODBC.
vi /etc/odbcinst.ini

# Included in the unixODBC package
[PostgreSQL]
Description = ODBC for Postgre
SQLDriver = /usr/lib/libodbcpsql.so
Setup = /usr/lib/libodbcpsqlS.so
FileUsage = 1
# Driver from the MyODBC package
# Setup from the unixODBC package
[MySQL]
Description = ODBC for MySQL
Driver = /usr/lib/libmyodbc.so
Setup = /usr/lib/libodbcmyS.so
FileUsage = 1
#Driver de FreeTDS
[FreeTDS]
Description = FreeTDS driver
Driver = /usr/lib/libtdsodbc.so 
# ruta de la libreria odbc de freetds
Setup = /usr/lib/libtdsodbc.so 
# ruta de la libreria odbc de freetds
Trace = YesTrace
File = /tmp/freetds.log
FileUsage = 1

Creando DSN con UnixODBC
bueno ahora solo bastara con hacer nuestro DSN usando UnixODBC; pero vamos hacerlo de forma visual para que no quede dudas.

ejecutamos el comando ODBCConfig asi tal como esta escrito.
ODBCConfig






Finalmente como resultado en el odbc.ini tendras esto.
vi /etc/odbc.ini

[EESA]
Description = FreeTDS
Driver = FreeTDS
Servername = MyServer70
Server = server2000
Address = 172.16.0.253
Port = 1433
Database = dbeesa
TDS_Version = 7.0
Language = us_english
TextSize =
Domain =
PacketSize =
[miconexion]
Description = MySQL
Driver = MySQL
Server = localhost
Database = mysql
Port = 3306
Socket =
Option =
Stmt =

Conectando con ISQL a nuestro servidor Ms SqlServer usando el DSN
isql -v EESA sa



Codificando PHP
Solo nos falta la prueba final hacer conexion php usando funciones ODBC.
touch /var/www/html/testodbc.phpvi /var/www/html/testodbc.php

<?php
//conexion a la bd
$connection = odbc_connect('EESA', $user, $pass) or die('No pudo crear una conexión');
$sqlquery="select titleofcourtesy,firstname,lastname from Northwind..employees" ;
//odbc_exec($connection, $sqlquery);
$cur=odbc_exec($connection,$sqlquery);
print"
"; while(odbc_fetch_row($cur)){ //colleccion resultados $nombre=odbc_result($cur,2); $apellido=odbc_result($cur,3); //format and display results print ("$nombre"); print ("$apellido"); } print "
"; //cerrando la conexion odbc_close($connection); ?>



bueno ver para creer, ahi esta la prueba ahora no te olvides de compartir.

Comentarios

  1. Alex

    Escribo para agradecerte por el artículo. Fue, efectivamente, muy útil.
    Muchas gracias nuevamente.

    Saludos.

    ResponderBorrar
  2. ¿Oye compa existe algun driver para dbase o visual fox pro?

    Saludos desde Anécdotas de las curvas del seno

    ResponderBorrar
  3. Hola
    Seguí paso a paso la instalación y configuración de FreeTDS y unixODBC tal como la describes en este artículo (con la salvedad de que lo hice en un Centos 6 de 64 bits). Probé ejecutar en una terminal los comando para ver si se establecía la conexión con el servidor (tsql -S SRV3 -p 1433 -U sa y también probé ejecutar isql -v SRV3 sa pass) y ambos comandos funcionan bien. Puedo acceder a las base de datos de mi servidor MS-SQL 2008. Pero cuando intento ejecutar ODBCConfig me dice que no es un comándo válido, así que configuré a mano el odbc.ini tal como están en el ejemplo. Hasta ahí todo bien... pero desde PHP no logro conectarme.
    Me da el siguiente error:
    Warning: odbc_connect(): SQL error: [unixODBC][FreeTDS][SQL Server]Unable to connect to data source, SQL state S1000 in SQLConnect in /var/www/html/testodbc.php on line 29 No se pudo establecer la conexion con SRV3

    Alguna idea de que puedo estar haciendo mal.

    ResponderBorrar
  4. Disculpas por la demora, a Jorge seria de gran ayuda revises los 2 temas de FreeTDS para que la idea este más clara en cuanto a la configuración de PHP con FreeTDS no olvides usar phpinfo().

    ResponderBorrar
  5. Que hago si no existe el archivo /etc/locales.conf???

    ResponderBorrar
  6. una pregunta y si lo quiero intentar con sqlsrv? es que mssql me da muchos problemas, pero tambien tengo mi pagina web corriendo en sistema operativo linux

    ResponderBorrar
    Respuestas
    1. FreeTDS conecta con motores de Base de Datos Ms SQL Server. gracias por escribir espero que vuelvas pronto.

      Borrar

Publicar un comentario

Entradas más populares de este blog

JSP y MySQL Conexion a Base de Datos

Tema anterior: http://superahacker.blogspot.com/2009/06/instalacion-netbeans-glassfish.html El modulo JSP con conexion a una base de datos MySQL, tiene las siguientes caracteristicas usar una clase Java llamada "Customers" que se encuentra en un package llamado "Mypackage" , para usar sus metodos y con ellos llevar acabo una consulta.

JSP y MsSQL Conexion a Base de Datos

Tema anterior: http://superahacker.blogspot.com/2009/09/jsp-y-mysql-conexion-base-de-datos.html El modulo JSP con conexion a una base de datos Ms SQL Server, tiene las siguientes caracteristicas usar una clase Java llamada "Customers" que se encuentra en un package llamado "Mypackage" , para usar sus metodos y con ellos llevar acabo una consulta.

FreeTDS para el acceso a MsSQL desde PHP en Linux CentOS 5

Tema Anterior: http://superahacker.blogspot.com/2009/04/instalacion-de-unixodbc-para-la.html En esta ocasion la situación es como conectar con PHP 5 desde un Servidor Linux a una base de Datos Ms Sql Server en Servidor Windows.