Start · Sprachen · PHP · Referenz · mysqli_connect

mysqli_connect

Funktion

Baut eine neue Verbindung zu einem MySQL-Server auf und gibt ein <code>mysqli</code>-Objekt zurück.

seit PHP 5.0.0 Kategorie: db

Signatur

mysqli_connect(string $host = null, string $username = null, string $password = null, string $database = null, int $port = null, string $socket = null): mysqli|false

Beschreibung

mysqli_connect() ist der prozedurale Pendant zur objektorientierten new mysqli()-Syntax und stellt eine Verbindung zu einem MySQL- oder MariaDB-Datenbankserver her. Die Funktion gibt bei Erfolg ein mysqli-Verbindungsobjekt zurück, das für alle nachfolgenden Datenbankoperationen benötigt wird.

Die Verbindungsparameter wie Host, Benutzername, Passwort, Datenbankname, Port und Socket können direkt übergeben werden. Werden Parameter weggelassen oder als null übergeben, verwendet PHP die in der php.ini definierten Standardwerte (z. B. mysqli.default_host, mysqli.default_user etc.).

Im Host-Parameter können spezielle Präfixe verwendet werden: p: vor dem Hostnamen aktiviert persistente Verbindungen (Connection Pooling), was bei häufigen Datenbankzugriffen die Performance verbessern kann. Bei der Verwendung persistenter Verbindungen sollte jedoch auf unerwartete Zustände geachtet werden.

Für moderne PHP-Anwendungen empfiehlt sich oft PDO als datenbankabstrahierende Alternative, da es mehrere Datenbanksysteme unterstützt. mysqli_connect() ist jedoch weiterhin die erste Wahl, wenn ausschließlich MySQL/MariaDB eingesetzt wird und die prozedurale Schreibweise bevorzugt wird.

Parameter

Name Typ Default Beschreibung
$host string ini_get('mysqli.default_host') Hostname oder IP-Adresse des MySQL-Servers. Das Präfix p: aktiviert persistente Verbindungen. Wird null übergeben, wird der php.ini-Standardwert verwendet.
$username string ini_get('mysqli.default_user') MySQL-Benutzername für die Anmeldung. Wird null übergeben, wird der php.ini-Standardwert verwendet.
$password string ini_get('mysqli.default_pw') Passwort des MySQL-Benutzers. Wird null übergeben, wird der php.ini-Standardwert verwendet.
$database string Name der Standarddatenbank, die nach dem Verbindungsaufbau ausgewählt werden soll. Kann auch nachträglich mit mysqli_select_db() gesetzt werden.
$port int ini_get('mysqli.default_port') TCP-Port des MySQL-Servers. Standardmäßig 3306, sofern in der php.ini kein anderer Wert konfiguriert ist.
$socket string ini_get('mysqli.default_socket') Pfad zum Unix-Socket oder Name der Named Pipe. Wird nur verwendet, wenn der Host localhost oder 127.0.0.1 ist.

Rückgabewert

Typ
mysqli|false
Beschreibung
Gibt bei erfolgreicher Verbindung ein mysqli-Objekt zurück. Im Fehlerfall wird false zurückgegeben und ein Fehler der Stufe E_WARNING ausgelöst. Der Fehlertext ist über mysqli_connect_error() und der Fehlercode über mysqli_connect_errno() abrufbar.

Beispiele

Einfache Datenbankverbindung mit Fehlerbehandlung

<?php
$host     = 'localhost';
$user     = 'mein_benutzer';
$password = 'geheimes_passwort';
$database = 'meine_datenbank';

$conn = mysqli_connect($host, $user, $password, $database);

if (!$conn) {
    die('Verbindungsfehler (' . mysqli_connect_errno() . '): ' . mysqli_connect_error());
}

echo 'Verbindung erfolgreich hergestellt.';

// Datenbankoperationen ...

mysqli_close($conn);
Verbindung erfolgreich hergestellt.

Persistente Verbindung mit benutzerdefiniertem Port

<?php
// Persistente Verbindung über Präfix 'p:' und nicht standardmäßigen Port
$conn = mysqli_connect('p:db.example.com', 'app_user', 'sicheres_pw', 'shop', 3307);

if (!$conn) {
    fprintf(STDERR, "Verbindung fehlgeschlagen: %s\n", mysqli_connect_error());
    exit(1);
}

// Zeichensatz auf UTF-8 setzen
mysqli_set_charset($conn, 'utf8mb4');

$result = mysqli_query($conn, 'SELECT COUNT(*) AS anzahl FROM produkte');
$row    = mysqli_fetch_assoc($result);

echo 'Anzahl Produkte: ' . $row['anzahl'];

mysqli_close($conn);
Anzahl Produkte: 42

Vergleich prozedural vs. objektorientiert

<?php
// Prozedural (mysqli_connect)
$conn1 = mysqli_connect('localhost', 'user', 'pass', 'testdb');

// Objektorientiert (äquivalent)
$conn2 = new mysqli('localhost', 'user', 'pass', 'testdb');

// Beide liefern dasselbe mysqli-Objekt
var_dump($conn1 instanceof mysqli); // bool(true)
var_dump($conn2 instanceof mysqli); // bool(true)

mysqli_close($conn1);
$conn2->close();
bool(true) bool(true)

// Wichtig · Fallstricke

Sicherheitshinweis: Speichere Zugangsdaten niemals direkt im Quellcode. Verwende stattdessen Umgebungsvariablen oder externe Konfigurationsdateien, die außerhalb des Web-Roots liegen und nicht öffentlich zugänglich sind.

SQL-Injection: Eine geöffnete Verbindung allein schützt nicht vor SQL-Injection. Verwende stets mysqli_prepare() mit gebundenen Parametern (Prepared Statements), um Benutzereingaben sicher in SQL-Abfragen einzubetten.

Zeichensatz: Setze nach dem Verbindungsaufbau explizit den Zeichensatz mit mysqli_set_charset($conn, 'utf8mb4'), um Encoding-Problemen und potenziellen Sicherheitslücken vorzubeugen. Das reine Setzen über SQL (SET NAMES) reicht nicht aus.

Persistente Verbindungen (p:): Persistente Verbindungen werden nicht automatisch zurückgesetzt. Temporäre Tabellen, Transaktionen oder geänderte Sitzungsvariablen aus einem vorherigen Request können noch vorhanden sein. Bereinige den Zustand daher manuell oder verzichte in solchen Fällen auf persistente Verbindungen.