Start · Sprachen · PHP · Referenz · PDO_SQLSRV DSN

PDO_SQLSRV DSN

Funktion

Der <code>pdo_sqlsrv</code>-DSN ermöglicht die Verbindung zu Microsoft SQL Server- und SQL-Azure-Datenbanken über PDO.

seit PHP 5.3.0 Kategorie: db

Signatur

PDO::__construct(string $dsn, string $username = '', string $password = '', array $options = [])

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

Typ
PDO
Beschreibung
Gibt bei erfolgreicher Verbindung ein 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 erfolgreich! 1: Max Mustermann 2: Erika Musterfrau ...

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();
}
1: Erster Artikel 2: Zweiter Artikel ...

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();
}
Verbindung über Windows-Authentifizierung hergestellt.

// 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.