MSSQL, PHP und Linux – (k)ein Dreamteam

Für manche Projekte braucht man ein etwas ausgefallenes Setup. So ist die Kombination aus Microsoft-SQL-Server und dem Zugriff aus einer PHP-Webseite absolut kein Standard. Da die Datenbank, aus welcher die Daten benötigt werden, in meinem Fall aber nur als MS-SQL-Datenbank vorliegt, muss man schauen, wie man das ganze zum Zusammenspiel bringt. Zusätzlich soll diese Webseite auch nicht auf dem Windows-Server laufen, sondern auf einer eigenständigen Maschine in einem Apache. Da es unnötig wäre hierfür noch eine Windows-Server-Lizenz zu verschleudern, muss der Apache dann auch noch in einer Linux-VM betrieben werden 😉

Als erstes habe ich Ubuntu Server 16.04 LTS in einer VM installiert. Danach geht es mit folgenden Schritten weiter:

Apache installieren:

Da PHP7 Verbindungen zu MS-SQL nicht mehr unterstützt, fällt dieses leider raus! Da PHP5 dies kann, aber in den offiziellen Paketquellen von Ubuntu nicht mehr enthalten ist, muss eine weitere Paketquelle hinzugefügt werden.

Repository für PHP5 hinzufügen:

Alle nötigen PHP-Module installieren:

Für die Anbindung an die MS-SQL-Datenbank wird noch der FreeTDS-Treiber als “Zwischenschicht” benötigt, der Zugriff auf die Datenbank findet dann später mittels PDO  (PHP Data Object) statt.

Freetds installieren:

Hierdurch wird FreeTDS und die Library für den Apache installiert. Warum auch immer, ist diese Library nicht, wie es der Name vermuten lässt, nur für Sybase-SQL sondern auch für MS-SQL. Das muss man auch erst einmal wissen 😉

Um die Verbindung zur Datenbank aus PHP aufzubauen wird ein PDO in der PHP-Anwendung erstellt:

Um den korrekten Weg für den Aufbau der Datenbank-Verbindung heraus zu finden sind einige Stunden ins Land gegangen, denn wie so oft im deutschsprachigen Raum benötigt man UTF8 und dies muss beim Aufbau der Datenbankverbindung dem Server mitgeteilt werden. Leider funktionierten von den ca. 20 Lösungen, die ich dafür bei meiner Recherche fand, keine bis auf die oben gezeigte.

Ganz wichtig ist es aber, möglichst kein UnixODBC zu benutzen! Bei ein paar Projekten habe ich dies versucht und bin damit immer schnell an Grenzen bzgl. der Performance gestoßen und kam aufgrund der wirklich miesen Dokumentation nicht sehr weit. Dies war beispielsweise bei einer OTRS-Installation der Fall, wo die Kombination Perl unter Linux/Apache und MS-SQL realisiert werden sollte. Dazu habe ich damals auch einige Arbeitsstunden verbraten und auch im OTRS-Forum um Hilfe gefragt, wo die Meinung eindeutig gegen UnixODBC ausgefallen ist.

Die Einstellungen in der oben gelb hervorgehobenen Zeile entsprechen hierbei den Konfigurationen die man in der freetds.conf-Datei für ein Verbindungsprofil vornehmen kann:

Wie in der Grafik beschrieben, umgeht man durch die Konfiguration innerhalb des PDO-Objekts die FreeTDS-Konfigurationsdatei. Diese braucht man also für den Datenbankzugriff über PDO gar nicht anpassen.

Tobias Langner

Ich arbeite seit mehreren Jahren als IT-Administrator, bin ausgebildeter Fachinformatiker für Systemintegration und Studium-„Pausierer“ an der FernUni Hagen

Achtung: Für die Richtigkeit der zur Verfügung gestellten Informationen, Skripte, etc. übernehme ich keine Gewähr. Deren Nutzung geschieht ausdrücklich auf eigene Gefahr!

Schreibe einen Kommentar