Signatur
Beschreibung
Der DSN (Data Source Name) für den pdo_sqlsrv-Treiber beginnt mit dem Präfix sqlsrv: und enthält eine durch Semikolons getrennte Liste von Schlüssel-Wert-Paaren, die die Verbindungsparameter definieren. Dieser Treiber wird von Microsoft bereitgestellt und ermöglicht den Zugriff auf Microsoft SQL Server (ab Version 2005) sowie auf Azure SQL Database.
Die wichtigsten DSN-Schlüssel sind Server (Hostname oder IP-Adresse, optional mit Port-Angabe als Server,Port), Database (Name der Zieldatenbank), APP (Anwendungsname für die Verbindung) sowie ConnectionPooling, Encrypt und TrustServerCertificate für Sicherheits- und Performance-Einstellungen.
Im Unterschied zu anderen PDO-Treibern werden Benutzername und Passwort beim sqlsrv-Treiber entweder im DSN oder als separate Parameter des Konstruktors übergeben. Alternativ kann Windows-Authentifizierung (Integrated Security) über den DSN-Parameter Authentication=SqlPassword bzw. ohne explizite Anmeldedaten genutzt werden.
Für Azure SQL Database empfiehlt es sich, Encrypt=1 und ggf. TrustServerCertificate=0 zu setzen, um verschlüsselte und verifizierte Verbindungen sicherzustellen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $dsn Pflicht | string | Der DSN-String im Format sqlsrv:Server=Host;Database=DBName;.... Unterstützte Schlüssel: Server, Database, APP, ConnectionPooling, Encrypt, TrustServerCertificate, TraceFile, TraceOn, TransactionIsolation, LoginTimeout, MultipleActiveResultSets (MARS), Scrollable. |
|
| $username | string | SQL-Server-Benutzername für die Authentifizierung. Bei Windows-Authentifizierung kann dieser Parameter leer gelassen werden. | |
| $password | string | Passwort des SQL-Server-Benutzers. Bei Windows-Authentifizierung kann dieser Parameter leer gelassen werden. | |
| $options | array | [] | Assoziatives Array mit PDO-Treiberoptionen, z. B. PDO::ATTR_ERRMODE oder treiberspezifische Konstanten. |
Rückgabewert
PDO-Objekt zurück. Bei einem Fehler wird eine PDOException geworfen.Beispiele
Einfache Verbindung zu einem lokalen SQL Server
<?php
try {
$dsn = 'sqlsrv:Server=localhost,1433;Database=meine_datenbank';
$pdo = new PDO($dsn, 'sa', 'geheimesPasswort', [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
]);
echo "Verbindung erfolgreich!\n";
$stmt = $pdo->query('SELECT TOP 5 id, name FROM kunden');
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
echo $row['id'] . ': ' . $row['name'] . "\n";
}
} catch (PDOException $e) {
echo 'Verbindungsfehler: ' . $e->getMessage();
}
Verbindung zu Azure SQL Database mit Verschlüsselung
<?php
try {
$server = 'mein-server.database.windows.net';
$database = 'meine_azure_db';
$dsn = "sqlsrv:Server={$server},1433;"
. "Database={$database};"
. "Encrypt=1;"
. "TrustServerCertificate=0;"
. "LoginTimeout=30";
$pdo = new PDO($dsn, 'azure_user@mein-server', 'AzurePasswort!', [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
]);
$stmt = $pdo->prepare('SELECT id, titel FROM artikel WHERE aktiv = ?');
$stmt->execute([1]);
$artikel = $stmt->fetchAll();
foreach ($artikel as $a) {
echo $a['id'] . ': ' . $a['titel'] . "\n";
}
} catch (PDOException $e) {
echo 'Azure-Verbindungsfehler: ' . $e->getMessage();
}
Windows-Authentifizierung (Integrated Security)
<?php
try {
// Kein Benutzername/Passwort nötig – Windows-Anmeldung wird verwendet
$dsn = 'sqlsrv:Server=SQLSERVER01;Database=firma_db';
$pdo = new PDO($dsn, null, null, [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
]);
echo "Verbindung über Windows-Authentifizierung hergestellt.\n";
} catch (PDOException $e) {
echo 'Fehler: ' . $e->getMessage();
}
// Wichtig · Fallstricke
Sicherheitshinweis: Speichere Verbindungsdaten (Benutzername, Passwort, Servername) niemals direkt im Quellcode. Nutze Umgebungsvariablen oder eine gesicherte Konfigurationsdatei außerhalb des Web-Roots.
Treiberinstallation: Der pdo_sqlsrv-Treiber ist nicht im PHP-Kern enthalten und muss separat von Microsoft als PECL-Paket oder als DLL installiert werden. Unter Linux wird zusätzlich der Microsoft ODBC Driver for SQL Server benötigt.
MARS (Multiple Active Result Sets): Wird MultipleActiveResultSets=true im DSN gesetzt, können mehrere gleichzeitig offene Abfragen auf einer Verbindung ausgeführt werden – nützlich bei verschachtelten Abfragen, kann aber die Performance beeinflussen.
Port-Angabe: Der Port wird beim sqlsrv-Treiber mit Komma angegeben (Server=host,1433), nicht mit Doppelpunkt wie bei anderen Treibern.