Ir al contenido principal

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.



Requisitos en Linux Server (Web):
Apache
FreeTDS http://www.freetds.org/
PHP http://www.php.net/
libsybdb5 php-mssql libraries for connecting to MS SQL and Sybase SQL servers. http://www.php.net/manual/en/book.mssql.php
Requisitos en Windows Server (Database) :
Ms Sql Server Enterprise

Consideraciones:
Siempre es bueno aclarar que los 2 servidores estan en la misma lan y que los puertos tcp ip 1433 del servidor windows en donde esta la base de datos, esta abierto y que ningun software o firewall este bloqueando esta via. ya que Ms Sql Server usa por default este puerto de comunicacion.
consideren usar una version de Ms Sql Server Enterprise que por defecto viene con todas las librerias y directivas de conexion de red habilitadas.

bueno vamos haber como se hace todo esto.

Instalación FreeTds y sus dependencias
yum -y install freetds*

Instalación del módulo de PHP para el acceso a bases de datos Microsoft SQL Server.
yum -y install php-mssql*

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

# Microsoft SQL Server 7.0
[MyServer70]
host = 172.16.0.253
port = 1433
tds version = 7.0
#Microsoft SQL Server 2000
[MyServer2000]
host = 172.16.0.200
port = 1433
tds version = 7.1
#Microsoft SQL Server 2005
[MyServer2005]
host = 172.16.0.201
port = 1433
tds version = 7.2
#Microsoft SQL Server 2008
[MyServer2008]
host = 172.16.0.202
port = 1433
tds version = 7.2

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
tsql -S myserver70 -p 1433 -U sa


bueno como se puede observer la conexion esta establecida con el servidor ahora solo es cuestión de ver como esta la configuracion de php y el soporte de mssql.
entonces hagamos nuestro archivo php llamado test.php

touch /var/www/html/test.php <br />
vi /var/www/html/test.php

y dentro de el pongamos lo siguiente.
<?php phpinfo();?>

Ahora es momento de ver esto en nuestro navegador web http://localhost/test.php y ubiquese en mssql y observe en el parametro library version debe indicar que trabajaremos con FreeTds.

El momento de la verdad, tenemos que hacer una consulta con php a mssql.
entonces vamos a crear un archivo test1.php
touch /var/www/html/test1.php 
vi /var/www/html/test1.php

dentro de el pongamos lo siguiente, vamos a usar como prueba a base de datos Northwind y mostraremos a los empleados que se encuentran registrados en la tabla employees si se fijan en el funcion mssql_connect("estoy haciendo uso del alias de freetds.conf","el usuario de Mssql","la clave del usuario MsSql")
<?php
$msconnect=mssql_connect("MyServer70","sa","");
$msdb=mssql_select_db("Northwind",$msconnect);
$msquery = "select titleofcourtesy,firstname,lastname from employees";
$msresults= mssql_query($msquery);
while ($row = mssql_fetch_array($msresults)) {
echo "<li>" . $row['titleofcourtesy'] . " " . $row['firstname'] . " " . $row['lastname'] . "</li> \n"; 
} 
?> 

veamos el resultado en nuestro navegador web {ver para creer}.

Comentarios

  1. Hola Superahacker, no he podido inatalar el unixODBC-GUI , me sale lo siguiente que hago.

    Gracias,

    gogo



    [root@dhcppc6 ~]# yum -y install unixODBC-GUI-Qt
    Loaded plugins: fastestmirror
    Loading mirror speeds from cached hostfile
    * rpmforge: apt.sw.be
    * base: dist1.800hosting.com
    * updates: mirror.ash.fastserv.com
    * addons: mirrors.netdna.com
    * extras: mirrors.netdna.com
    Setting up Install Process
    Parsing package install arguments
    No package unixODBC-GUI-Qt available.
    Nothing to do

    ResponderBorrar
    Respuestas
    1. Hola Gogo, gracias por los comentarios que muy tarde puedo responder. en un tema anterior escribi sobre YUM Repositorios podrias revisarlo para encontrar los paquetes http://superahacker.blogspot.com/2009/04/yum-repositorio-centos-5.html

      Borrar
  2. Hola Superahacker, tengo un problema

    locale is "es_ES.UTF-8"
    locale charset is "UTF-8"
    Password:
    Msg 20009, Level 9, State 0, Server OpenClient, Line 0
    Server is unavailable or does not exist.
    There was a problem connecting to the server

    tengo este error
    lo hice tal cual me podrias ayudar

    ResponderBorrar
    Respuestas
    1. Hola Willians,
      al parecer por el mensaje de error tienes problemas de conexion con el OpenClient desde tsql y se puede deber al soporte de FreeTDS con la versión de MsSQL, las pruebas realizadas fueron hechas sobre MsSQL 7 y MsSQL2000, seria bueno saber la versión de Windows y MsSQL que estas intentando conectar por el Firewall y los permisos de conexiones remotas.

      Borrar
  3. error u.u algo hago mal.. llevo varios días intentando conectarme desde php a el sql server (centOs - win server2003) y no mas nee

    encontré este post (muy bueno) pero ni así puedo realizar una conexión exitosa desde php...
    con tsql -S myserver70 -p 1433 -U sa
    si conecta y veo mis datos y todo.. pero
    php nop.. alguna sugerencia de por que podría ser?
    si tengo el php_mssql y el phpinfo(); me dice q esta = q en la img q pones pero no conecta u.u'

    ResponderBorrar
  4. Hola, me parece excelente el articulo publicado y he avanzado en el tema, pero me quedo en al mitad, no logro modificar el php.ini de tal manera que cuando ejecute phpinfo() me muestre la pantalla como la muestras. Puedes ayudarme por favor.

    ResponderBorrar
    Respuestas
    1. Hola Liliana
      Si hiciste la instalación del Modulo php-mssql
      yum -y install php-mssql*
      Verifica que la extension php-mssql este activada en CentOS existe un directorio donde se cargar las configuraciones adicionales para php php.d ubica en el /etc/php.d/mssql.ini y observa si la extesion se encuentra activada.
      extension=mssql.so

      Borrar
    2. a mi tamoco me sale esa parte

      Borrar
  5. Hola como estas????
    segui los procedimientos que publicaste, pero me puedo enlasar a SQLSERVER 2000 por consola, pero al momento de generar el script de php no aparece nada, que puede ser????

    ResponderBorrar
    Respuestas
    1. Hola Luis
      Es difícil hacer de adivino, seria bueno que activaras el reporte de errores en php y mostrarnos que es lo que responde el servidor.
      <?php
      error_reporting(E_ALL);
      ini_set("display_errors", 1);
      include("file_with_errors.php");
      ?>

      Borrar
  6. Hola Luis,
    en oportunidades he visto que volviendo a reinstalar el soporte de MSSQL para php resuelve el problema de configure. tendrias que quitarlo para volver a instalarlo

    yum remove php-mssql*
    yum -y install php-mssql*

    y por ultimo revisar el fichero phpinfo().

    ResponderBorrar
  7. Buenas Superhacker, sabes he logrado conectarme con tsql y revisar el estado del servidor mssql, lo que no he podido lograr es conectarme a traves del php (test1.php)

    Warning: mssql_connect() [function.mssql-connect]: Unable to connect to server: MyServer2005 in /var/www/html/index.php on line 5

    Saludos!

    ResponderBorrar
  8. Hola Buenos dias.

    He instalado todo pero siempre me esta mostrando este mensaje:
    PHP Warning: mssql_connect(): Unable to connect to server:
    He intentado de varias maneras pero no me funciona sigue mostrando este mensaje, estas son las pruebas que he realizado:

    Prueba 1: $msconnect=mssql_connect("10.1.1.209","sa","mipassword");

    Prueba 2: $msconnect=mssql_connect("SVRDLLOSINCO\WORK","sa","mipassword");

    Prueba 3: $msconnect=mssql_connect("SVRDLLOSINCO","sa","mipassword");


    Y con el tsql me muestra esto:
    [root@correo2 httpd]# tsql -S 10.1.1.27 -p 1433 -U sa
    locale is "en_US.UTF-8"
    locale charset is "UTF-8"
    Password:
    Msg 20009, Level 9, State 0, Server OpenClient, Line 0
    Server is unavailable or does not exist.
    There was a problem connecting to the server

    Que mas podré validar?

    ResponderBorrar

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.