Signatur
Beschreibung
mysqli_real_connect() stellt eine Verbindung zu einem MySQL-Datenbankserver her. Im Gegensatz zu mysqli_connect() setzt diese Funktion voraus, dass das mysqli-Objekt zuvor mit mysqli_init() erzeugt wurde. Das ermöglicht es, vor dem eigentlichen Verbindungsaufbau Optionen über mysqli_options() zu setzen, z. B. SSL-Zertifikate oder Verbindungs-Timeouts.
Über den Parameter flags lassen sich spezielle Verbindungsoptionen aktivieren, darunter MYSQLI_CLIENT_SSL für SSL-Verschlüsselung, MYSQLI_CLIENT_COMPRESS für Komprimierung des Datenstroms oder MYSQLI_CLIENT_FOUND_ROWS, um die Anzahl gefundener statt betroffener Zeilen zurückzugeben.
Diese Funktion ist besonders dann sinnvoll, wenn eine bestehende (persistente) Verbindung wiederverwendet werden soll oder wenn vor der Verbindung spezifische SSL-Parameter oder andere Low-Level-Optionen gesetzt werden müssen. Mit MYSQLI_CLIENT_SSL_DONT_VERIFY_SERVER_CERT kann die Zertifikatsprüfung deaktiviert werden – dies sollte in Produktionsumgebungen jedoch vermieden werden.
Im objektorientierten Stil steht die Methode mysqli::real_connect() zur Verfügung, die identisch funktioniert.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $mysql Pflicht | mysqli | Ein zuvor mit mysqli_init() erstelltes mysqli-Objekt. |
|
| $host | ?string | null | Hostname oder IP-Adresse des MySQL-Servers. Wird null oder ein leerer String übergeben, wird der Wert aus der PHP-Konfiguration (mysqli.default_host) verwendet. Ein vorangestelltes p: öffnet eine persistente Verbindung. |
| $username | ?string | null | MySQL-Benutzername. Bei null wird der Wert aus mysqli.default_user genutzt. |
| $password | ?string | null | Passwort des MySQL-Benutzers. Bei null wird der Wert aus mysqli.default_pw genutzt. |
| $database | ?string | null | Name der Standarddatenbank, die nach dem Verbindungsaufbau ausgewählt werden soll. Kann null sein, wenn keine Datenbank vorausgewählt werden soll. |
| $port | ?int | null | TCP/IP-Port, über den die Verbindung hergestellt wird. Bei null wird der Wert aus mysqli.default_port genutzt. |
| $socket | ?string | null | Pfad zum Unix-Socket oder zur Named Pipe. Bei null wird der Wert aus mysqli.default_socket genutzt. Das Setzen dieses Parameters erzwingt nicht die Verbindungsart; dafür muss host entsprechend gesetzt sein. |
| $flags | int | 0 | Bitmaske aus Verbindungsflags. Mögliche Werte: MYSQLI_CLIENT_COMPRESS, MYSQLI_CLIENT_FOUND_ROWS, MYSQLI_CLIENT_IGNORE_SPACE, MYSQLI_CLIENT_INTERACTIVE, MYSQLI_CLIENT_SSL, MYSQLI_CLIENT_SSL_DONT_VERIFY_SERVER_CERT. |
Rückgabewert
true bei erfolgreicher Verbindung zurück, false bei einem Fehler. Im Fehlerfall können Details über mysqli_connect_error() bzw. mysqli_connect_errno() abgefragt werden.Beispiele
Einfache Verbindung mit mysqli_init und mysqli_real_connect
<?php
$mysqli = mysqli_init();
if (!$mysqli) {
die('mysqli_init() fehlgeschlagen');
}
// Optional: Verbindungs-Timeout setzen
mysqli_options($mysqli, MYSQLI_OPT_CONNECT_TIMEOUT, 5);
$connected = mysqli_real_connect(
$mysqli,
'localhost',
'db_user',
'geheimes_passwort',
'meine_datenbank',
3306
);
if (!$connected) {
die('Verbindung fehlgeschlagen: ' . mysqli_connect_error());
}
echo 'Verbindung erfolgreich aufgebaut.' . PHP_EOL;
$result = mysqli_query($mysqli, 'SELECT VERSION() AS version');
$row = mysqli_fetch_assoc($result);
echo 'MySQL-Version: ' . $row['version'] . PHP_EOL;
mysqli_close($mysqli);
SSL-gesicherte Verbindung mit mysqli_real_connect
<?php
$mysqli = mysqli_init();
if (!$mysqli) {
die('mysqli_init() fehlgeschlagen');
}
// SSL-Zertifikate konfigurieren
mysqli_ssl_set(
$mysqli,
'/etc/ssl/client-key.pem', // Privater Schlüssel
'/etc/ssl/client-cert.pem', // Client-Zertifikat
'/etc/ssl/ca-cert.pem', // CA-Zertifikat
null,
null
);
$connected = mysqli_real_connect(
$mysqli,
'db.example.com',
'ssl_user',
'sicheres_passwort',
'produktions_db',
3306,
null,
MYSQLI_CLIENT_SSL
);
if (!$connected) {
die('SSL-Verbindung fehlgeschlagen: ' . mysqli_connect_error());
}
echo 'SSL-Verbindung erfolgreich aufgebaut.' . PHP_EOL;
// SSL-Status prüfen
$result = mysqli_query($mysqli, "SHOW STATUS LIKE 'Ssl_cipher'");
$row = mysqli_fetch_assoc($result);
echo 'SSL-Cipher: ' . $row['Value'] . PHP_EOL;
mysqli_close($mysqli);
// Wichtig · Fallstricke
Sicherheit: Verwende in Produktionsumgebungen niemals MYSQLI_CLIENT_SSL_DONT_VERIFY_SERVER_CERT, da dies Man-in-the-Middle-Angriffe ermöglicht. Setze stattdessen ein gültiges CA-Zertifikat über mysqli_ssl_set().
Passwörter: Speichere Datenbankpasswörter niemals im Quellcode. Nutze Umgebungsvariablen oder gesicherte Konfigurationsdateien außerhalb des Web-Roots.
Persistente Verbindungen: Wird dem Hostnamen ein p: vorangestellt, wird eine persistente Verbindung aus dem Verbindungspool wiederverwendet. Dies kann die Performance verbessern, erfordert aber sorgfältige Handhabung von Transaktionszuständen, da Verbindungen wiederverwendet werden können.
Fehlerbehandlung: Seit PHP 8.1 ist mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT) standardmäßig aktiv, sodass Fehler als Exceptions geworfen werden. In älteren Versionen muss der Rückgabewert explizit geprüft werden.