Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Die Microsoft-Treiber für PHP für SQL Server sind PHP-Erweiterungen, mit denen man Daten aus PHP-Skripten in der Microsoft SQL Datenbank-Engine lesen und schreiben kann. Das Paket enthält zwei Treiber, die denselben Microsoft ODBC-Treiber für SQL Server umfassen und dieselben Verbindungsoptionen teilen, sodass Sie die API auswählen können, die zu Ihrem Codebasis passt:
-
SQLSRV stellt eine prozedurale API (
sqlsrv_*Funktionen) bereit, die auf SQL Server-Funktionen zugeschnitten ist. - PDO_SQLSRV implementiert die PHP Data Objects (PDO)-Schnittstelle, sodass Code, der bereits PDO für andere Datenbanken verwendet, SQL Server mit minimalen Änderungen ansprechen kann.
Beide Treiber verbinden sich mit der Azure SQL-Datenbank, der SQL-Datenbank in Microsoft Fabric, der Azure SQL Managed Instance und allen unterstützten Versionen und Editionen von SQL Server (einschließlich Express-Editionen). Sie verwenden PHP-Ströme, um große Binär- und Zeichenwerte zu verschieben, ohne sie vollständig in den Speicher zu laden.
Auswählen des Startpunkts
- Um eine PHP-Entwicklungsumgebung einzurichten und deine erste Abfrage auszuführen, beginne mit Schritt 1: Konfiguration der Entwicklungsumgebung, dann Schritt 2: Erstellung einer SQL-Datenbank und Schritt 3: Mach einen Proof of Concept mit SQL über PHP.
- Um den Treiber unter Linux oder macOS zu installieren, beginnen Sie mit dem Installationstutorial für Linux und macOS und laden Sie die Microsoft-Treiber für PHP für SQL Server herunter.
- Um mit kennwortloser Authentifizierung eine Verbindung mit Azure SQL herzustellen, beginnen Sie mit Herstellen einer Verbindung mit Microsoft Entra-Authentifizierung und Verbindungsoptionen.
- Um eine bestehende Anwendung robust gegenüber vorübergehenden Ausfällen zu machen, navigieren Sie zu Resilienz bei Leerlaufverbindungen und Schritt 4: Stellen Sie mit PHP eine resiliente Verbindung mit SQL her.
- Um zwischen SQLSRV und PDO_SQLSRV zu entscheiden, gehe zu Übersicht der Microsoft Treiber für PHP für SQL Server und zum Vergleich von Ausführungsfunktionen.
- Um ein Installations-, Verbindungs- oder Abfrageproblem zu diagnostizieren, gehen Sie zu Troubleshooting, Handling errors and warnings sowie Logging activity.
- Um eine bestehende App schneller zu machen, gehe zu Performance Tuning.
Produktionsbasisplan für Azure SQL
Verwenden Sie diesen Codeausschnitt als Ausgangspunkt für eine produktionsorientierte Azure SQL-Verbindung mit dem PDO_SQLSRV-Treiber. Es liest den Server und die Datenbank aus Umgebungsvariablen (zum Beispiel App-Einstellungen von Azure App Service), authentifiziert sich mit einer verwalteten Identität, aktiviert TLS (Transport Layer Security) mit Validierung des Serverzertifikats, legt ein Anmeldezeitlimit fest, das einen Failover bei einem Kaltstart abdeckt, und setzt ConnectRetryCount und ConnectRetryInterval für die Resilienz von Leerlaufverbindungen in SQL Server. Die Hilfsfunktionen connectWithRetry und queryWithRetry auf Anwendungsebene versehen sowohl den anfänglichen Verbindungsaufbau als auch jede Anweisung mit einem begrenzten exponentiellen Backoff und trennen transiente Verbindungsfehler (die eine neue Verbindung erfordern) von transienten Abfragefehlern (bei denen dieselbe Verbindung wiederverwendet wird).
Benötigt PHP 8.0 und neuere Versionen, die PDO_SQLSRV-Erweiterung und Microsoft ODBC-Treiber für SQL Server 17.3.1.1 und spätere Versionen für Authentication=ActiveDirectoryMsi. Für die vollständige Liste der unterstützten Werte Authentication siehe Verbinden mit Microsoft Entra-Authentifizierung.
<?php
declare(strict_types=1);
// Transient errors that require a fresh connection to recover. SQLSTATE values
// starting with '08' cover ODBC connection-established and connection-broken
// states (for example, 08001, 08S01).
const CONNECT_RETRY_SQLSTATE_PREFIX = '08';
// SQL Server error codes that are transient regardless of when they surface:
// 1205 (deadlock victim), 1222 (lock request timeout), and the Azure SQL
// throttling, mid-query failover, and "database not currently available"
// codes that arrive with SQLSTATE HY000.
const TRANSIENT_SERVER_ERROR_CODES = [1205, 1222, 40501, 40613, 40197, 10928, 10929, 49918];
/**
* Open a connection, retrying transient failures with exponential backoff.
*/
function connectWithRetry(string $dsn, array $options, int $maxAttempts = 3): PDO
{
for ($attempt = 1; $attempt <= $maxAttempts; $attempt++) {
try {
$pdo = new PDO($dsn, null, null, $options);
error_log(sprintf('connected on attempt %d/%d', $attempt, $maxAttempts));
return $pdo;
} catch (PDOException $e) {
$sqlstate = (string) $e->getCode();
$driverCode = isset($e->errorInfo[1]) ? (int) $e->errorInfo[1] : 0;
$isTransient = str_starts_with($sqlstate, CONNECT_RETRY_SQLSTATE_PREFIX)
|| in_array($driverCode, TRANSIENT_SERVER_ERROR_CODES, true);
if (!$isTransient || $attempt === $maxAttempts) {
error_log(sprintf('connect failed on attempt %d/%d: %s', $attempt, $maxAttempts, $e->getMessage()));
throw $e;
}
$delay = 2 ** ($attempt - 1); // 1, 2, 4 seconds
error_log(sprintf('connect attempt %d hit transient %s/%d; retrying in %d seconds', $attempt, $sqlstate, $driverCode, $delay));
sleep($delay);
}
}
throw new RuntimeException('connectWithRetry exhausted retries');
}
/**
* Run a parameterized query, retrying transient statement failures on the same
* connection. Deadlocks (1205) roll back the transaction before the driver sees
* the error, so rerunning a single statement is safe. If the statement was part
* of a multistatement transaction, wrap the whole transaction in your own retry
* loop so earlier statements replay too.
*/
function queryWithRetry(PDO $pdo, string $sql, array $params = [], int $maxAttempts = 3): PDOStatement
{
for ($attempt = 1; $attempt <= $maxAttempts; $attempt++) {
try {
$stmt = $pdo->prepare($sql);
$stmt->execute($params);
return $stmt;
} catch (PDOException $e) {
$driverCode = isset($e->errorInfo[1]) ? (int) $e->errorInfo[1] : 0;
$isTransient = in_array($driverCode, TRANSIENT_SERVER_ERROR_CODES, true);
if (!$isTransient || $attempt === $maxAttempts) {
error_log(sprintf('query failed on attempt %d/%d: %s', $attempt, $maxAttempts, $e->getMessage()));
throw $e;
}
$delay = 2 ** ($attempt - 1);
error_log(sprintf('query attempt %d hit transient code %d; retrying in %d seconds', $attempt, $driverCode, $delay));
sleep($delay);
}
}
throw new RuntimeException('queryWithRetry exhausted retries');
}
// Load endpoint details from application configuration. In Azure App Service,
// these can come from app settings or Key Vault-backed settings.
$server = getenv('SQL_SERVER') ?: null;
$database = getenv('SQL_DATABASE') ?: null;
if ($server === null || $database === null) {
throw new RuntimeException('Set SQL_SERVER and SQL_DATABASE in your application configuration.');
}
$dsn = sprintf(
'sqlsrv:Driver={ODBC Driver 18 for SQL Server};Server=%s;Database=%s;'
. 'Encrypt=true;TrustServerCertificate=false;'
. 'LoginTimeout=90;Authentication=ActiveDirectoryMsi;'
. 'ConnectRetryCount=5;ConnectRetryInterval=15;'
. 'MultiSubnetFailover=true;',
$server,
$database
);
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
PDO::SQLSRV_ATTR_QUERY_TIMEOUT => 30,
];
$pdo = connectWithRetry($dsn, $options);
$stmt = queryWithRetry($pdo, 'SELECT TOP (?) name FROM sys.databases ORDER BY name', [5]);
foreach ($stmt as $row) {
echo $row['name'], PHP_EOL;
}
Dieser Codeausschnitt ist für Azure SQL-Datenbank Failovergruppen und Azure SQL Managed Instance optimiert.
Driver={ODBC Driver 18 for SQL Server}fixiert den ODBC-18-Treiber. Wenn der Host auch ODBC 17 installiert hat, kann PDO_SQLSRV auf ODBC 17 binden. Ältere 17.x-Builds lehnen neuereAuthenticationWerte ab; zum BeispielAuthentication=ActiveDirectoryMsibenötigt ODBC 17.3.1.1 oder eine spätere Version. Weitere Informationen finden Sie unter Für das Verbindungszeichenfolgen-Attribut „Authentication“ wurde ein ungültiger Wert angegeben.ConnectRetryCountundConnectRetryIntervalsind ODBC-Verbindungszeichenfolge-Schlüsselwörter, die die Widerstandsfähigkeit der SQL Server Idle-Verbindung ermöglichen: Der Treiber stellt eine defekte Idle-Verbindung transparent wieder her. Das unterscheidet sich vonqueryWithRetryauf Anwendungsebene, das eine Anweisung wiederholt, die aufgrund eines vorübergehenden Fehlers wie einem Deadlock oder einem Abfrage-Timeout fehlschlägt. Die beiden ergänzen sich, also behalte beide. Stellen Sie sicher, dassLoginTimeoutmindestensConnectRetryCount * ConnectRetryIntervalbeträgt, damit der Idle-Reconnect-Pfad sein volles Budget erhält; im Beispiel werden 90 Sekunden verwendet, um 5 × 15 Sekunden für Wiederholungsversuche plus zusätzlichen Spielraum für die initiale Anmeldung bei einem kalten Failover abzudecken.Ergänzen Sie die Aufrufe auf Anwendungsebene
error_log()durch treiberseitige Diagnosefunktionen. Für PDO_SQLSRV setzen Siepdo_sqlsrv.log_severityinphp.ini(nur bei der Initialisierung einstellbar); für SQLSRV rufen Siesqlsrv_configure("LogSubsystems", ...)zur Laufzeit auf. Weitere Informationen finden Sie unter Protokollierungsaktivität.; php.ini - enable PDO_SQLSRV driver diagnostics alongside the application-level ; error_log() calls in the sample. Use 1 (errors) in production; -1 (all) is ; useful during triage but very chatty. [pdo_sqlsrv] pdo_sqlsrv.log_severity = 1Für eine vom Benutzer zugewiesene verwaltete Identität wird die ID der Identität als PDO-Argument
$username(new PDO($dsn, $identityId, null, $options)) weitergegeben. Verwenden Sie die Client-ID der Identität in Azure App Service oder Azure Container Instances. Verwenden Sie andernfalls ihre Objekt-ID. Die PHP-Treiber übernehmen dieses Verhalten vom zugrunde liegenden Microsoft ODBC Driver for SQL Server; für weitere Informationen siehe Verwendung von Microsoft Entra ID mit dem ODBC-Treiber. PDO_SQLSRV lehntUIDinnerhalb des DSN selbst ab. Verwenden Sie daher den Konstruktorslot. Durch die Übergabe vonnullals Benutzer (wie im Beispiel) wird die vom System zugewiesene verwaltete Identität des Azure-Hosts ausgewählt. Für SQLSRV (prozedural) übergibUIDim Array der Verbindungsoptionen.Legen Sie
MultiSubnetFailover=truefest, wenn Sie eine Verbindung mit einem Listener einer Failovergruppe, einem Listener einer Verfügbarkeitsgruppe oder einem Endpunkt einer Failoverclusterinstanz herstellen. Das Aktivieren dieser Einstellung verbessert die Verbindungsleistung sowohl für Listener von Verfügbarkeitsgruppen mit einem einzelnen Subnetz als auch für solche mit mehreren Subnetzen. Weitere Informationen finden Sie unter Unterstützung für Hochverfügbarkeit, Notfallwiederherstellung.Fügen Sie für die horizontale Leseskalierung oder ein lesbares sekundäres Replikat
ApplicationIntent=ReadOnlyzum Datenquellennamen (Data Source Name, DSN) hinzu.Für souveräne Clouds, bei denen das Zertifikat Subject Alternative Name (SAN) den Host, mit dem du dich verbindest, nicht enthält, füge
HostNameInCertificatees dem DSN hinzu (zum Beispiel*.database.usgovcloudapi.netbei Azure Government).Der Treiber basiert auf dem zugrunde liegenden Microsoft ODBC-Treiber für SQL Server zur Token-Erfassung. Managed Identity, Service Principal und Access Token Flows laufen alle über ODBC. Weitere Informationen finden Sie unter Verwenden von Microsoft Entra ID mit dem ODBC-Treiber).
Für höhere Sicherheit und Portabilität zwischen verschiedenen Umgebungen sollten Sie die Verbindungsinformationen außerhalb Ihres Codes halten. Speichere Verbindungsinformationen im Konfigurationssystem deiner Anwendung und nutze Azure Key Vault für sensible Werte und zentral verwaltete Verbindungseinstellungen.
Die entsprechende SQLSRV-Verbindung verwendet
sqlsrv_connect($server, ['Database' => $database, 'Encrypt' => true, 'Authentication' => 'ActiveDirectoryMsi', /* ... */])und gibt eine Ressource zurück. Das Wiederholungsmuster ist identisch: Fangen Sie einefalse-Rückgabe vonsqlsrv_connectab, überprüfen Siesqlsrv_errors()auf SQLSTATE, und warten Sie, bevor Sie es erneut versuchen. Ein vollständiges Beispiel finden Sie unter Schritt 4: Mit PHP eine resiliente Verbindung mit SQL herstellen.Die Wiederholungshilfsprogramme lesen
$e->errorInfo[1], geschützt durchisset().PDOException::$errorInfoist als?arraydeklariert und hat standardmäßig den Wertnull, sodass die defensive Prüfung auf einen Treibercode von0zurückfällt, wobei das SQLSTATE-Präfix08entscheidet, ob ein neuer Versuch unternommen wird.
Weitere Informationen zu den einzelnen Teilen dieser Konfiguration finden Sie unter:
- Verbindungsoptionen
- Herstellen einer Verbindung mit der Microsoft Entra-Authentifizierung
- Widerstandsfähigkeit der Leerlaufverbindung
- Herstellen einer Verbindung mit einer Microsoft Azure SQL-Datenbank
- Unterstützung für hohe Verfügbarkeit und Katastrophenwiederherstellung
Informationen zum Katalog der vorübergehenden Azure SQL-Fehler finden Sie unter Problembehandlung bei vorübergehenden Verbindungsfehlern.
Wichtigste Funktionen
- Zwei APIs, ein Treiberpaket: Procedural SQLSRV für SQL Server-First-Code oder PDO_SQLSRV für portablen PDO-Code.
- Breite Plattformunterstützung: Läuft auf Windows, Linux und macOS mit unterstützten PHP-Versionen.
-
Verschlüsselte Verbindungen: TLS-verschlüsselte Verbindungen über
Encrypt=true, wobei die Validierung von Serverzertifikaten durch kontrolliert wirdTrustServerCertificate. - Microsoft Entra ID-Authentifizierung: Passwortlose Verbindungen mit verwalteter Identität, Service Principal und Zugangstoken laufen über den zugrunde liegenden Microsoft ODBC-Treiber für SQL Server.
- Always Encrypted: clientseitige Verschlüsselung für vertrauliche Spalten mit optionalen sicheren Enklaven für Vorgänge direkt an Ort und Stelle.
-
Verbindungsstabilität: Integrierte Wiederholungsversuche für Leerlaufverbindungen mit
ConnectRetryCountundConnectRetryInterval. - PHP-Streams: Lesen und schreiben Sie große Binär- und Zeichenwerte als Streams, anstatt sie in den Speicher zu laden.
-
Unterstützung für Datentypen von Rich SQL Server: datetimeoffset, tabellenwertige Parameter, nvarchar und Unicode mit
PDO::SQLSRV_ENCODING_UTF8.
Get started
| Artikel | Beschreibung |
|---|---|
| Systemanforderungen | Unterstützte PHP-, Betriebssystem- und SQL Server-Versionen. |
| Unterstützungsmatrix | Detaillierte Kompatibilitätsmatrix für PHP-Treiber-Releases. |
| Laden Sie die Microsoft-Treiber für PHP für SQL Server herunter | Download-Links und Veröffentlichung von Artefakten. |
| Installationsanleitung für Linux und macOS | Installiere den Treiber und seine ODBC-Voraussetzungen unter Linux und macOS. |
| Treiber werden geladen | Aktiviere die Erweiterungen in php.ini. |
| Einstieg mit dem PHP SQL-Treiber | Ein End-to-End-Walkthrough, der die vier Anfangsschritte miteinander verbindet. |
| Überblick über den PHP SQL-Treiber | Was im Paket enthalten ist und wann man SQLSRV oder PDO_SQLSRV wählen sollte. |
Konfigurieren und Verbinden
| Artikel | Beschreibung |
|---|---|
| Verbindung zum Server | Eröffne eine Verbindung zu einer SQL Server-Instanz aus PHP. |
| Verbindungsoptionen | Vollständige Referenz für Verbindungsschlüsselwörter, Standardwerte und deren Einstellung. |
| Herstellen einer Verbindung mit einer Microsoft Azure SQL-Datenbank | Verbinden Sie eine PHP-Anwendung mit der Azure SQL-Datenbank. |
| Verbinden Sie sich an einem bestimmten Port | Einen nicht standardmäßigen TCP-Port anvisieren. |
| Pooling von Verbindungen | Verwenden Sie ODBC-Verbindungen über PHP-Anfragen hinweg. |
| Deaktivieren Sie mehrere aktive Ergebnissätze (MARS) | Schalte MARS für Kompatibilität aus. |
| Unterstützung für LocalDB | Verbinden Sie sich mit einer SQL Server LocalDB-Instanz. |
| Unterstützung für hohe Verfügbarkeit und Katastrophenwiederherstellung | Verfügbarkeitsgruppenlistener und Multisubnetzfailover. |
| Widerstandsfähigkeit der Leerlaufverbindung | Automatische Wiederverbindung bei unterbrochenen Leerlaufverbindungen. |
Authenticate
| Artikel | Beschreibung |
|---|---|
| Herstellen einer Verbindung mit der Microsoft Entra-Authentifizierung | Verwaltete Identität, Service Principal, Zugriffstoken und Passwortflüsse. |
| Verbinden Sie sich mit SQL Server-Authentifizierung | Verwenden Sie einen SQL-Login mit Benutzernamen und Passwort. |
| Verbinden Sie sich mit Windows-Authentifizierung | Verwenden Sie Windows-integrierte Authentifizierung auf domänengebundenen Hosts. |
Secure
| Artikel | Beschreibung |
|---|---|
| Sicherheitshinweise | Bedrohungsmodell und Verteidigungs-in-Depth-Leitlinien für PHP-Anwendungen. |
| Immer verschlüsselt mit den PHP-Treibern | Konfigurieren sie die clientseitige Verschlüsselung für vertrauliche Spalten. |
| Immer verschlüsselt mit sicheren Enklaven | Aktivieren Sie erweiterte Vorgänge für verschlüsselte Spalten mit sicheren Enklaven. |
Daten abrufen und aktualisieren
| Artikel | Beschreibung |
|---|---|
| Programmführer | End-to-End-Programmieranleitung für beide Treiber. |
| Vergleich von Ausführungsfunktionen | Wählen Sie die richtige Ausführungsfunktion für Ihre Arbeitsbelastung. |
| Direkte und vorbereitete Ausführung von Anweisungen (PDO_SQLSRV) | Wann sollte man direkte Ausführung versus vorbereitete Anweisungen verwenden? |
| Datenabruf | Rufen Sie Zeilen, Spalten und Streamwerte ab. |
| Datenaktualisierung | Zeilen einfügen, aktualisieren und löschen. |
| Führe parametrisierte Abfragen durch | Binde Parameter, um gegen SQL-Injection zu schützen. |
| Daten als Datenstrom senden | Streame große Binär- und Zeichenwerte in SQL Server. |
| Ausführen von Transaktionen | Gruppieren Sie Anweisungen in atomaren Transaktionen. |
| Verwendung tabellenwertiger Parameter | Übergebe einen Parameter TABLE an ein gespeichertes Verfahren. |
| Gib einen Cursortyp an und wähle Zeilen aus | Wählen Sie Vorwärtscursor, statische, dynamische oder keysetgesteuerte Cursor aus. |
Datentypen
| Artikel | Beschreibung |
|---|---|
| Konvertierung von Datentypen | Wie der Treiber PHP-Typen auf SQL Server-Typen zuordnet. |
| Standard-SQL Server-Datentypen | Standard-SQL Server-Typ für jeden PHP-Wert. |
| Standard-PHP-Datentypen | Standard-PHP-Typ für jeden SQL Server-Spaltentyp. |
| Spezifizieren Sie SQL Server-Datentypen (SQLSRV) | Den SQL Server-Typ beim Binden von Parametern überschreiben. |
| Spezifizieren Sie PHP-Datentypen | Überschreiben Sie den PHP-Typ beim Abrufen. |
| Senden und abrufen von UTF-8-Daten | Verwenden Sie PDO::SQLSRV_ENCODING_UTF8 für Unicode-Roundtrips. |
| ASCII-Daten unter Linux und macOS senden und abrufen | Behandeln Sie ASCII-Roundtrips auf Nicht-Windows-Hosts. |
| Formatiere Dezimale und Geld (SQLSRV) | Formatieren von Spalten vom Typ decimal und money mit dem SQLSRV-Treiber. |
| Formatiere Dezimalzahlen und Geld (PDO_SQLSRV) | Formatieren Sie Spalten vom Typ decimal und money mit dem PDO_SQLSRV-Treiber. |
| Nicht-systembasierte Standorteinstellungen | Lokalisierte Dezimaltrennzeichen und andere Überlegungen zum Gebietsschema. |
Fehler und Diagnose
| Artikel | Beschreibung |
|---|---|
| Umgang mit Fehlern und Warnungen | Fehler- und Warnungsbehandlung mit beiden Treibern. |
| Fehler- und Warnbehandlung konfigurieren (SQLSRV) | Optimieren Sie, wie der SQLSRV-Treiber Fehler und Warnungen meldet. |
| Fehler und Warnungen behandeln (SQLSRV) | Inspizieren Sie Fehler, die von SQLSRV-Funktionen zurückgegeben werden. |
| Protokollierungsaktivität | Aktivieren Sie das Treiber-Logging zur Diagnoseerfassung. |
Bereitstellen und Betreiben
| Artikel | Beschreibung |
|---|---|
| Leistungsoptimierung | Verbindungsmanagement, Batching, vorbereitete Anweisungen, Cursor, Speicher und serverseitiges Monitoring. |
| Problembehandlung | Diagnostizieren Sie häufige Probleme mit Installationen, Verbindungen, Abfragen, Datentypen, Transaktionen und Containern. |
Referenzinhalt
| Artikel | Beschreibung |
|---|---|
| SQLSRV-Treiber-API-Referenz | Alle sqlsrv_* Funktionen, Parameter und Rückgabewerte. |
| PDO_SQLSRV Treiberreferenz | PDO- und PDOStatement-Methoden, die vom PDO_SQLSRV Treiber unterstützt werden. |
| Konstanten | Konstanten, die von den Treibern freigegeben werden, einschließlich Typ- und Codierungskonstanten. |
Verwandte Aufgaben
| Artikel | Beschreibung |
|---|---|
| Veröffentlichungshinweise | Per-Version-Historie mit neuen Funktionen, Fehlerbehebungen, Änderungen an der Plattformunterstützung und Download-Links. |
| Über Codebeispiele in der Dokumentation | Konventionen, die von den Codebeispielen in diesem Abschnitt verwendet werden. |
| Codebeispiele für den PHP-SQL-Treiber | End-to-End-Beispielanwendungen für SQLSRV und PDO_SQLSRV. |
| Unterstützte Ressourcen | Community- und Unterstützungskanäle. |