Banco de Dados · 3 min read · Oct 25, 2025

Acesso PHP a um Banco de Dados MSSQL a partir do Debian Etch com ODBC e FreeTDS

Acesso PHP a um Banco de Dados MSSQL a partir do Debian Etch com ODBC e FreeTDS

Isso assume que você já tem o Apache2 e o PHP5 configurados corretamente em seu sistema. Meus esforços para fazer essa conexão funcionar foram compilados a partir de informações encontradas em www.unixodbc.org e www.freetds.org. Esses passos funcionaram para mim com um servidor web Apache2 com php5 rodando no Debian Etch estável em outubro de 2007. O servidor SQL está rodando Microsoft SQL 2005 em um sistema operacional Windows 2003 Server.

Nestes instruções, assumo que você fez su para uma conta root. Eu também uso o joe como meu editor, então substitua isso pelo seu editor de escolha.

Primeiro, instale os pacotes necessários:

#apt-get install tdsodbc libct3 unixodbc php5-odbc

Isso deve baixar e instalar o unixODBC, FreeTDS e as extensões odbc para php5.

Em seguida, criamos templates para registrar o Driver ODBC para FreeTDS e para criar o DSN ODBC para FreeTDS. Você pode colocar esses arquivos onde quiser, pois você usará “odbcinst” para realmente configurar o sistema. Eu escolhi hospedá-los em /etc/freetds, onde os arquivos de configuração tds residem.

Registro do Driver ODBC:

#joe /etc/freetds/tds.driver.template

Então cole isso no editor:

[TDS]
Description     = Driver FreeTDS para Linux & MSSQL em Win32
Driver          = /usr/lib/odbc/libtdsodbc.so
Setup           = /usr/lib/odbc/libtdsS.so

Agora o DSN:

#joe /etc/freetds/tds.dsn.template

Então cole isso no editor:

[DSN_NAME]
Description     = Teste para freeTDS
Driver          = TDS
Trace           = Não
Database        = DefaultDatabase [substitua pelo nome do seu banco de dados]
Server          = mysqlserver.inter.net [substitua pelo host do seu servidor SQL]
Port            = 5050 [substitua pela porta que o SQL está escutando]

Ok, agora você precisa inserir esses templates no sistema unixODBC:

#odbcinst -i -d -f /etc/freetds/tds.driver.template
#odbcinst -i -s -f /etc/freetds/tds.dsn.template

Um problema que tive neste ponto é que o DSN foi instalado nas configurações odbc pessoais da conta root. Como não posso fazer login como www-data para executar o comando de instalação do dsn, simplesmente copiei o arquivo .odbc do root para /etc/odbc.ini, que é o arquivo DSN de sistema que todos os usuários podem referenciar.

#mv /etc/odbc.ini /etc/odbc.ini.bak  [caso você tenha outros]
#cp /root/.odbc.ini /etc/odbc.ini

Agora você precisa habilitar a extensão odbc no php editando seu arquivo php.ini. A menos que você tenha feito algum tipo de compilação ou instalação personalizada, o arquivo ini do php deve estar no diretório /etc/php5/apache2/, então:

#joe /etc/php5/apache2/php.ini

A melhor prática é adicionar isso à seção de extensões do arquivo php.ini:

extension = odbc.so

Agora você precisa reiniciar o Apache para que as alterações do php entrem no sistema.

#/etc/init.d/apache2 restart

Isso deve ser tudo. Supondo que você tenha conectividade com a máquina MSSQL, você deve ser capaz de testar essa configuração usando isql. Usando as configurações acima e um nome de usuário Bob com uma senha Marley, aqui está o teste:

#isql -v DSN_NAME Bob Marley

Você deve obter o prompt SQL> e pode executar qualquer comando select ou outros comandos que desejar. Agora, vamos para a parte do PHP. Tudo que você precisa fazer (novamente assumindo os exemplos acima) é adicionar as informações de conexão ao seu arquivo php e começar a codificar. O seguinte é um exemplo básico que você, é claro, precisará adaptar à sua vontade.

Se você tiver problemas, comece com a solução básica de problemas de rede. Certifique-se de que você pode pingar o servidor a partir da sua caixa Debian. Tente telnetar para o servidor e a porta que o MSSQL está escutando. Se estiver funcionando, você deve obter uma tela em branco da qual precisa sair. Depois disso, se o exemplo isql funcionar, mas sua conexão php não, não tenho certeza de onde apontá-lo.

Boa sorte!

Share: X/Twitter LinkedIn

Receba novas postagens na sua caixa de entrada

Sem spam. Cancele a assinatura a qualquer momento.