Datenbankzugriff · 3 min read · Oct 25, 2025
PHP-Zugriff auf eine MSSQL-Datenbank von Debian Etch mit ODBC und FreeTDS
PHP-Zugriff auf eine MSSQL-Datenbank von Debian Etch mit ODBC und FreeTDS
Dies setzt voraus, dass Sie bereits Apache2 und PHP5 ordnungsgemäß auf Ihrem System eingerichtet haben. Meine Bemühungen, diese Verbindung zum Laufen zu bringen, wurden aus Informationen zusammengestellt, die auf www.unixodbc.org und www.freetds.org zu finden sind. Diese Schritte funktionierten für mich mit einem Apache2-Webserver mit php5, der im Oktober 2007 auf Debian Etch stable lief. Der SQL-Server läuft auf Microsoft SQL 2005 auf einem Windows 2003 Server-Betriebssystem.
In diesen Anweisungen gehe ich davon aus, dass Sie sich als Root-Benutzer angemeldet haben. Ich verwende auch joe als meinen Editor, also ersetzen Sie das durch Ihren bevorzugten Editor.
Zuerst installieren Sie die erforderlichen Pakete:
#apt-get install tdsodbc libct3 unixodbc php5-odbcDies sollte unixODBC, FreeTDS und die ODBC-Erweiterungen für php5 herunterladen und installieren.
Als nächstes erstellen wir Vorlagen, um den ODBC-Treiber für FreeTDS zu registrieren und um die ODBC DSN für FreeTDS zu erstellen. Sie können diese Dateien überall ablegen, wo Sie möchten, da Sie “odbcinst” verwenden werden, um das System tatsächlich zu konfigurieren. Ich habe mich entschieden, sie in /etc/freetds zu speichern, wo sich die TDS-Konfigurationsdateien befinden.
ODBC-Treiberregistrierung:
#joe /etc/freetds/tds.driver.templateFügen Sie dann dies in den Editor ein:
[TDS]
Description = FreeTDS-Treiber für Linux & MSSQL auf Win32
Driver = /usr/lib/odbc/libtdsodbc.so
Setup = /usr/lib/odbc/libtdsS.soJetzt die DSN:
#joe /etc/freetds/tds.dsn.templateFügen Sie dann dies in den Editor ein:
[DSN_NAME]
Description = Test zu freeTDS
Driver = TDS
Trace = Nein
Database = DefaultDatabase [ersetzen Sie durch Ihren Datenbanknamen]
Server = mysqlserver.inter.net [ersetzen Sie durch den Host Ihres SQL-Servers]
Port = 5050 [ersetzen Sie durch den Port, auf dem SQL lauscht]Ok, jetzt müssen Sie diese Vorlagen in das unixODBC-System einfügen:
#odbcinst -i -d -f /etc/freetds/tds.driver.template#odbcinst -i -s -f /etc/freetds/tds.dsn.templateEin Problem, das ich an diesem Punkt hatte, war, dass die DSN in die persönlichen ODBC-Einstellungen des Root-Kontos installiert wurde. Da ich mich nicht als www-data anmelden kann, um den DSN-Installationsbefehl auszuführen, habe ich einfach die .odbc-Datei des Root-Benutzers nach /etc/odbc.ini kopiert, die die systemweite DSN-Datei ist, auf die alle Benutzer zugreifen können.
#mv /etc/odbc.ini /etc/odbc.ini.bak [für den Fall, dass Sie andere hatten]#cp /root/.odbc.ini /etc/odbc.iniJetzt müssen Sie die ODBC-Erweiterung in PHP aktivieren, indem Sie Ihre php.ini-Datei bearbeiten. Es sei denn, Sie haben eine Art benutzerdefinierte Installation oder Build vorgenommen, sollte die php ini-Datei im Verzeichnis /etc/php5/apache2/ sein, also:
#joe /etc/php5/apache2/php.iniBest Practice ist es, dies zum Abschnitt “Erweiterungen” der php.ini-Datei hinzuzufügen:
extension = odbc.soJetzt müssen Sie Apache neu starten, um die PHP-Änderungen ins System zu bringen.
#/etc/init.d/apache2 restartDas sollte es sein. Vorausgesetzt, Sie haben eine Verbindung zur MSSQL-Maschine, sollten Sie in der Lage sein, dieses Setup mit isql zu testen. Mit den obigen Einstellungen und einem Benutzernamen von Bob mit einem Passwort von Marley hier der Test:
#isql -v DSN_NAME Bob MarleySie sollten die SQL>-Eingabeaufforderung erhalten und können beliebige SELECT- oder andere Befehle ausführen, die Sie möchten. Jetzt zum PHP-Teil. Alles, was Sie tun müssen (wieder vorausgesetzt, die obigen Beispiele), ist, die Verbindungsinformationen zu Ihrer PHP-Datei hinzuzufügen und mit dem Programmieren zu beginnen. Folgendes ist ein einfaches Beispiel, das Sie natürlich nach Ihren Wünschen anpassen müssen.
Wenn Sie Probleme haben, beginnen Sie mit grundlegenden Netzwerkfehlerbehebungen. Stellen Sie sicher, dass Sie den Server von Ihrem Debian-Computer anpingen können. Versuchen Sie, sich mit Telnet mit dem Server und dem Port zu verbinden, auf dem MSSQL lauscht. Wenn es funktioniert, sollten Sie einen leeren Bildschirm erhalten, von dem Sie sich abmelden müssen. Danach, wenn das isql-Beispiel funktioniert, Ihre PHP-Verbindung jedoch nicht, bin ich mir nicht sicher, wo ich Sie hinweisen soll.
Viel Glück!
Erhalte neue Beiträge in deinem Posteingang.
Kein Spam. Jederzeit abmelden.