Database Access · 3 min read · Oct 25, 2025

Accesso PHP a un database MSSQL da Debian Etch con ODBC e FreeTDS

Accesso PHP a un database MSSQL da Debian Etch con ODBC e FreeTDS

Questo presuppone che tu abbia già configurato correttamente Apache2 e PHP5 sul tuo sistema. I miei sforzi per far funzionare questa connessione sono stati compilati da informazioni trovate su www.unixodbc.org e www.freetds.org. Questi passaggi hanno funzionato per me con un server web Apache2 con php5 in esecuzione su Debian Etch stabile nell’ottobre del 2007. Il server SQL sta eseguendo Microsoft SQL 2005 su un sistema operativo Windows 2003 Server.

In queste istruzioni presumo che tu sia passato a un account root. Uso anche joe come mio editor, quindi sostituisci con il tuo editor preferito.

Prima installa i pacchetti necessari:

#apt-get install tdsodbc libct3 unixodbc php5-odbc

Questo dovrebbe scaricare e installare unixODBC, FreeTDS e le estensioni odbc per php5.

Successivamente creiamo i modelli per registrare il driver ODBC per FreeTDS e per creare il DSN ODBC per FreeTDS. Puoi mettere questi file dove vuoi poiché utilizzerai “odbcinst” per configurare effettivamente il sistema. Ho scelto di collocarli in /etc/freetds dove si trovano i file di configurazione tds.

Registrazione del driver ODBC:

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

Poi incolla questo nell’editor:

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

Ora il DSN:

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

Poi incolla questo nell’editor:

[DSN_NAME]
Description     = Test per freeTDS
Driver          = TDS
Trace           = No
Database        = DefaultDatabase [sostituisci con il nome del tuo database]
Server          = mysqlserver.inter.net [sostituisci con l'host del tuo server SQL]
Port            = 5050 [sostituisci con la porta su cui SQL sta ascoltando]

Ok, ora devi inserire questi modelli nel sistema unixODBC:

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

Un problema che ho avuto a questo punto è che il DSN è stato installato nelle impostazioni odbc personali dell’account root. Poiché non posso accedere come www-data per eseguire il comando di installazione del dsn, ho semplicemente copiato il file .odbc di root in /etc/odbc.ini, che è il file DSN a livello di sistema a cui tutti gli utenti possono fare riferimento.

#mv /etc/odbc.ini /etc/odbc.ini.bak  [nel caso tu ne avessi altri]
#cp /root/.odbc.ini /etc/odbc.ini

Ora devi abilitare l’estensione odbc in php modificando il tuo file php.ini. A meno che tu non abbia fatto qualche tipo di build o installazione personalizzata, il file ini di php dovrebbe trovarsi nella directory /etc/php5/apache2/, quindi:

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

La prassi migliore è aggiungere questo alla sezione delle estensioni del file php.ini:

extension = odbc.so

Ora devi riavviare Apache per far entrare le modifiche php nel sistema.

#/etc/init.d/apache2 restart

Questo dovrebbe essere tutto. Supponendo che tu abbia connettività con la macchina MSSQL, dovresti essere in grado di testare questa configurazione utilizzando isql. Utilizzando le impostazioni sopra e un nome utente di Bob con una password di Marley, ecco il test:

#isql -v DSN_NAME Bob Marley

Dovresti ottenere il prompt SQL> e puoi eseguire qualsiasi comando select o altro che desideri. Ora passiamo alla parte PHP. Tutto ciò che devi fare (ancora una volta supponendo gli esempi sopra) è aggiungere le informazioni di connessione al tuo file php e iniziare a programmare. Il seguente è un esempio base che dovrai ovviamente adattare alle tue esigenze.

Se hai problemi, inizia con la risoluzione dei problemi di rete di base. Assicurati di poter pingare il server dalla tua macchina debian. Prova a telnetare al server e alla porta su cui MSSQL sta ascoltando. Se funziona, dovresti ottenere uno schermo vuoto da cui devi uscire. Dopo di che, se l’esempio isql funziona ma la tua connessione php non funziona, non sono sicuro su dove indirizzarti.

Buona fortuna!

Share: X/Twitter LinkedIn

Ricevi i nuovi post nella tua casella di posta.

Nessuno spam. Disiscriviti in qualsiasi momento.