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
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
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.
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.
Conectando con Tsql a nuestro servidor Ms SqlServer
vamos hacer una prueba de conexion usando Tsql, para probar nuestro alias con FreeTDS.
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.
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.
Finalmente como resultado en el odbc.ini tendras esto.
Conectando con ISQL a nuestro servidor Ms SqlServer usando el DSN
Codificando PHP
Solo nos falta la prueba final hacer conexion php usando funciones ODBC.
"; 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.
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"
bueno ver para creer, ahi esta la prueba ahora no te olvides de compartir.
Alex
ResponderBorrarEscribo para agradecerte por el artículo. Fue, efectivamente, muy útil.
Muchas gracias nuevamente.
Saludos.
¿Oye compa existe algun driver para dbase o visual fox pro?
ResponderBorrarSaludos desde Anécdotas de las curvas del seno
Hola
ResponderBorrarSeguí 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.
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().
ResponderBorrarQue hago si no existe el archivo /etc/locales.conf???
ResponderBorrarLo puedes crear con algún editor de textos
Borraruna 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
ResponderBorrarFreeTDS conecta con motores de Base de Datos Ms SQL Server. gracias por escribir espero que vuelvas pronto.
Borrar