Conectar php (debian) a bbdd SQL Server 2008 (Windows) [Solucionado]

Saludos Lista.

Hay una aplicacion en PHP con bbdd Mysql todo funciona bien.

Las bases de datos se llevaron a SqlServer 2008 como pruebas, y en esa maquina (windows) se instalo Wamp que contiene php, alli se realizo la conexión por medio de odbc y se conecta bien por hacia la base de datos, antes se intento con mssql pero no se pudo, nos funciono con odbc.

Ahora llevamos el código pero a un servidor linux, para realizar conexión, lo único que hicimos fue cambiar la ip para que apunte al servidor windows, el usuario y la bbdd, pero nada, da error de conexión.

busque en google y nada, la misma pagina de php me manda a algo llamado esasysoftware odbc sqlserver.

Estoy pensando instalar xamp o wamp en debian para ver que pasa si funciona igual, Saludos, Espero me puedan ayudar con informacion.

Yo no soy el programador en si, pero si domino bien la parte del servidor.

En dado caso que no se pueda (cosa que no creo) la solucion momentanea es utilizar bbdd y aplicacion con wamp o xamp en el mismo servidor donde esta sql server 2008.

Gracias.

Verifica e investiga sobre permisos! SqlServer es muy especial en cuanto a eso, de hecho el mismo windows; no es lo mismo el acceso a la misma máquina que en otro host, verifica los permisos de la base de datos y del obdc.

En todo caso no es muy recomendable como lo haces, deberías verificar un acceso por medio de un usuario con permisos a la base de datos especifica. A mi me ocurrí algo parecido pero con acces y en ese caso el problema era que la carpeta donde estaba la base de datos no tenía establecidos permisos para modificación por parte de una conexión externa. Sin embargo con acces es otro andar, no tiene tantas complejidades de seguridad.

La otra es que pongas aqui el mensaje exacto que despliega PHP. Saludos!

Para conexiones de base de datos te recomiendo PDO , MDB2 de PEAR o alguna otra capa de abstracción para bases de datos, de todas formas creo que el paquete que buscas es:

php5-sybase

suerte

Según lo que entendí es que quieres realizar conexiones con php desde un host remoto desde linux a windows

si esto es correcto tendrás que tener los siguientes puntos claros

1 el puerto de mssql "Microsoft SQL Server" abierto
2 tendrás que habilitar la extensión mssql en php ¿como? abrir php.ini buscar ;extension=php_mssql.dll quitar el símbolo ; y reinicia el apache o el servidor que uses

con eso tendrás conexión ala base de datos desde cualquier host solo quedaría configurar la seguridad y listo

jame369 por lo que yo he entendido el código está en un server linux y la base de datos en un windows.
En debian no hay dll-s, tu post se es para un servidor en windows.

ZiTAL escribió:

jame369 por lo que yo he entendido el código está en un server linux y la base de datos en un windows.
En debian no hay dll-s, tu post se es para un servidor en windows.

; ... or under UNIX:
;
extension=msql.so
;

Efectivamente, pero como he dicho antes hay que instalar el paquete:

php5-sybase

apt-get install php5-sybase

y luego añadir la linea:

extension=mssql.so

al php.ini mssql, con 2 s-s :)

Ya que en debian no vienen por defecto algunos módulos.

ZiTAL escribió:

Efectivamente, pero como he dicho antes hay que instalar el paquete:

php5-sybase

apt-get install php5-sybase

y luego añadir la linea:

extension=mssql.so

al php.ini mssql, con 2 s-s :)

Ya que en debian no vienen por defecto algunos módulos.

seguro que es con 2 "s", en el archivo de php.ini esta con una por defecto

Te hablo con conocimiento de causa ya que curro con debian y php, no con mssql pero sí con oracle, creo que el único que trae por defecto php es alguno de mysql (ya que tiene varios). Y ahora he hecho la prueba de como instalar mssql :)

Listo Solucione de la siguiente manera.

necesite primero tener instalado en linux los siguientes paquetes:

php5-odbc
unixodbc
freetds-common
tdsodbc
php5-sybase (este los instale por si acaso, pero creo que no hace falta.
php5-mssql (Este lo instale por si acaso, pero creo que no hace falta).

Luego de tener todo eso, segui esta guia: http://www.howtoforge.com/php5_mssql_debian_etch_free_tds_unix_odbc

Ojo cabe destacar que en mi caso el programador iba a usar en el codigo odbc y no mssql pero sirva para los 2 siempre y cuando se vaya por odbc.

Simplemente se crean 2 archivos en /etc/ que son:

odbc.ini que contiene lo siguiente:

[sql]
Description = Test to freeTDS
Driver = tds
Trace = No
Database = tepuy
Server = 192.168.2.13
Port = 1433

Esto en si es la conexion que se llaman en microsoft DNS.

y en el arhcivo: odbcinst.ini que contiene lo siguiente:

[tds]
Description = FreeTDS Driver for Linux & MSSQL on Win32
Driver = /usr/lib/odbc/libtdsodbc.so
Setup = /usr/lib/odbc/libtdsS.so
UsageCount = 1

Que es el driver.

teniendo esto y siguiendo la guía claro, es simplemente reiniciar apache y listo.

la prueba de conexion es asi:

donde -v es para ver la salida del comando, sql es mi nombre dsn, sa es el usuario de la bbdd SqlServer y sa123 el pasword.

aplicaciones:/# isql -v sql sa sa123
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
SQL>

Si lo pongo mal el password o el usuario va este error:

aplicaciones:/# isql -v sql sa sa1234
[S1000][unixODBC][FreeTDS][SQL Server]Unable to connect to data source
[37000][unixODBC][FreeTDS][SQL Server]Login failed for user 'sa'.
[ISQL]ERROR: Could not SQLConnect
aplicaciones:/#

NOTA: deben habilitar el usuario administrador de SQL para despues poder ingresar, la autenticación es por sql y no por el usuario de Windows.

De Aquí en Adelante ya queda de parte del Programador adecuar el codigo en php en el servidor linux.

No es por nada, pero Debian es la #%%^$#@%^ jajajaja. Busque Busque Busque, probe en centos, opensuse, fedora, y nada (no quiero decir que no se pueda) simplemente hacer un aptitude install lo que sea y listo.