Konfiguration des Treibers
Der Treiber lässt sich durch das Setzen entsprechender Werte konfigurieren. Um die aktuelle Konfiguration zu ermitteln, können Sie die Funktion sqlsrv_get_config() aufrufen. Diese Funktion liefert den Wert der übergebenen Konfigurationseinstellung zurück. Wollen Sie die Konfiguration des Treibers ändern, verwenden Sie die sqlsrv_configure()-Funktion oder definieren die Werte entsprechend in der php.ini. Insgesamt gibt es drei Optionen für die Konfiguration:
- LogSubsystems
- LogSeverity
- WarningsReturnAsErrors
Über LogSubsystems lässt sich die Protokollierung der Subsysteme steuern (Tabelle 2).
| Wert | Beschreibung |
|---|---|
| SQLSRV_LOG_SYSTEM_ALL (-1) | Die Protokollierung der Subsysteme wird aktiviert. |
| SQLSRV_LOG_SYSTEM_OFF (0) | Deaktiviert die Protokollierung. |
| SQLSRV_LOG_SYSTEM_INIT (1) | Aktiviert die Protokollierung der Initialisierungen. |
| SQLSRV_LOG_SYSTEM_CONN (2) | Aktiviert die Protokollierung der Verbindungen. |
| SQLSRV_LOG_SYSTEM_STMT (4) | Aktiviert die Protokollierung der Anweisungen. |
| SQLSRV_LOG_SYSTEM_UTIL (8) | Aktiviert die Protokollierung der Fehlerfunktionen. |
Tabelle 2: Steuerung der Protokollierung
Die Einstellung LogSeverity legt fest, was nach dem Aktivieren der Protokollierung aufgezeichnet werden soll (Tabelle 3).
| Wert | Beschreibung |
|---|---|
| SQLSRV_LOG_SEVERITY_ALL (-1) | Fehler, Hinweise und Warnungen werden protokolliert. |
| SQLSRV_LOG_SEVERITY_ERROR (1) | Es werden ausschließlich Fehler protokolliert. |
| SQLSRV_LOG_SEVERITY_WARNING (2) | Nur Warnungen werden protokolliert. |
| SQLSRV_LOG_SEVERITY_NOTICE (4) | Hinweise werden protokolliert. |
Tabelle 3: Konfiguration der Protokollierung
Über WarningsReturnAsErrors wird bestimmt, ob Fehler und Warnungen protokolliert werden sollen, die durch Aufrufen der sqlsrv()-Funktion generiert wurden. Weist man WarningsReturnAsErrors den Wert 1 zu, werden Warnungen genauso wie Fehler behandelt. Um Warnungen nicht als Fehler behandeln zu lassen, verwenden Sie den Wert 0.
Das Thema Sicherheit
Microsoft hat im Zusammenhang mit dem SQL-Server-Treiber für PHP einige Sicherheitshinweise veröffentlicht. In erster Linie handelt es sich bei den dort beschriebenen Dingen um Selbstverständlichkeiten. So wird z. B. vorgeschlagen, auf verschlüsselte Verbindungen zurückzugreifen, wenn vertrauliche Daten übertragen werden. Und auch die Empfehlung, parametrisierte Abfragen zu verwenden, fehlt in dieser Liste nicht. Interessanter sind da schon die Hinweise hinsichtlich der Windows-Authentifizierung. Die bietet nämlich gleich zwei Vorteile:
- Während der Authentifizierung werden keinerlei Anmeldeinformationen über das Netzwerk übertragen.
- Benutzer unterliegen einer Kontoverwaltung, die zentral gesteuert wird.
Ein weiterer interessanter Sicherheitsaspekt betrifft die bereits angesprochene Fehlerbehandlung. Hier empfiehlt Microsoft, den Parameter WarningsAsErrors während der Anwendungsentwicklung auf true zu setzen. Dadurch werden Warnungen vom Treiber als Fehler angesehen. Standardmäßig liefern sqlsrv()-Funktionen false, sobald eine Warnung oder ein Fehler generiert wird. Soll eine sqlsrv()-Funktion false nicht zurückliefern, wenn eine Warnung (aber kein Fehler) generiert wurde, setzen Sie die folgende Zeile an den Anfang Ihres Skripts: sqlsrv_configure("WarningsReturnAsErrors", 0);. Ebenso kann aber auch der Wert sqlsrv.WarningsReturnAsErrors = 0 in der php.ini gesetzt werden.
Perfekte Werkzeuge
Der Treiber ist nicht immer die beste Lösung. Unter Umständen ist es besser, eine bestehende MS-SQL-Datenbank in eine MySQL-Datenbank zu konvertieren und anschließend wie gewohnt auf Basis von PHP und MySQL zu arbeiten. Solche Konvertierungen lassen sich mit diversen Tools durchführen. Eine der interessantesten Anwendungen ist dabei sicherlich MS SQL Data Wizard ein. Bei dem handelt es sich zunächst einmal um ein GUI-Frontend für MS-SQL-Datenbanken. Das Besondere an diesem Tool ist jedoch die automatische Generierung der PHP-Skripte auf Basis von Tabellenabfragen u. ä. Den MS-SQL-PHP-Generator gibt es einmal kostenlos und in einer Professionell Version.
Fazit
Mit Version 1.1 des SQL-Server-Treibers für PHP hat Microsoft zweifellos einen Schritt in die richtige Richtung getan. Einige Kinderkrankheiten, die man in der ersten Version noch hinnehmen musste, wurden entfernt. Exemplarisch seien hier die UTF-8-Unterstützung und die Möglichkeit zur MARS-Deaktivierung genannt. Ebenso sind aber auch Dinge, die an der letzten Version angeprangert wurden, nach wie vor unverändert enthalten. So scheint Microsoft an dem dreimonatigen Veröffentlichungszyklus festhalten zu wollen. Wie problematisch dieser vergleichsweise lange Zeitraum sein kann, wird deutlich, wenn man sich die Fortschritte ansieht, die PHP oftmals binnen drei Monaten macht. Der Treiber läuft dadurch Gefahr, mit der PHP-Entwicklung nicht schritthalten zu können. Und noch etwas spricht gegen den Treiber in seiner jetzigen Form: Er ist momentan ausschließlich für Windows verfügbar. Ein weiterer Kritikpunkt ist die Informationspolitik im weitesten Sinn. So ist es vielen ein Dorn im Auge, das sowohl der offizielle Blog als auch die CodePlex-Projektwebseite direkt von Microsoft betrieben werden. Denn das – so die Kritiker – ermöglicht es Microsoft, gezielt zu beeinflussen, welche abgegebenen Kommentare zu dem Treiber veröffentlicht werden.
Trotz aller Kritik bleibt letztendlich aber festzuhalten: Microsoft stellt mit dem SQL-Server-Treiber für PHP-Entwickler eine interessante Option zur Verfügung, um auf MS-SQL-Datenbanken via PHP zugreifen zu können.
Daniel Koch arbeitet als freiberuflicher Programmierer und Autor in Berlin.



