W3docs

mysqli_options()

Erfahren Sie, wie PHP mysqli_options() zusätzliche Verbindungsoptionen wie Timeouts und LOCAL INFILE vor dem Öffnen einer MySQLi-Verbindung setzt.

Die Funktion mysqli_options() setzt zusätzliche Verbindungsoptionen, die festlegen, wie PHP mit MySQL kommuniziert. Dieser Leitfaden erklärt, was jede häufige Option bewirkt, die strenge Regel darüber, wann sie aufgerufen werden darf, und wie sie mit mysqli_real_connect() in einer realen Verbindungssequenz kombiniert werden kann.

Einführung in die Funktion mysqli_options()

mysqli_options() konfiguriert das Verhalten eines MySQLi-Verbindungs-Handles bevor die Verbindung geöffnet wird. Es ist das prozedurale Äquivalent der objektorientierten Methode mysqli::options().

Das Wichtigste dabei ist die Reihenfolge der Operationen. Ein normaler mysqli_connect()-Aufruf erstellt den Handle und verbindet ihn in einem Schritt, sodass kein Zeitfenster zum Setzen von Optionen bleibt. Um mysqli_options() zu verwenden, müssen diese beiden Schritte getrennt werden:

  1. Einen unverbundenen Handle mit mysqli_init() erstellen.
  2. Eine oder mehrere Optionen mit mysqli_options() setzen.
  3. Die eigentliche Verbindung mit mysqli_real_connect() öffnen.

Das Setzen einer Option, nachdem die Verbindung bereits hergestellt ist, hat je nach Option entweder keinen Effekt oder schlägt fehl.

Syntax

mysqli_options(mysqli $mysql, int $option, mixed $value): bool
  • $mysql — ein Verbindungs-Handle, der von mysqli_init() zurückgegeben wird (noch nicht verbunden).
  • $option — eine der MYSQLI_*-Optionskonstanten (siehe unten).
  • $value — der Wert für diese Option; der erwartete Typ hängt von der Option ab.

Die Funktion gibt bei Erfolg true und bei Misserfolg false zurück.

Häufige Optionskonstanten

KonstanteWerttypZweck
MYSQLI_OPT_CONNECT_TIMEOUTinteger (Sekunden)Maximale Wartezeit beim Öffnen der Verbindung.
MYSQLI_OPT_READ_TIMEOUTinteger (Sekunden)Maximale Wartezeit auf ein Abfrageergebnis.
MYSQLI_OPT_LOCAL_INFILE0 oder 1LOAD DATA LOCAL INFILE aktivieren oder deaktivieren.
MYSQLI_INIT_COMMANDstringEine SQL-Anweisung, die nach dem Verbinden/Wiederverbinden automatisch ausgeführt wird.
MYSQLI_OPT_INT_AND_FLOAT_NATIVE0 oder 1Integer- und Float-Spalten als native PHP-Typen zurückgeben (nur mysqlnd).

Verwendung der Funktion mysqli_options()

Das folgende Beispiel initialisiert einen Handle, setzt ein Verbindungs-Timeout und aktiviert das Laden lokaler Dateien, bevor die Verbindung geöffnet wird:

<?php
$mysqli = mysqli_init();

/* Set connection timeout to 10 seconds */
mysqli_options($mysqli, MYSQLI_OPT_CONNECT_TIMEOUT, 10);

/* Enable LOAD DATA LOCAL INFILE */
mysqli_options($mysqli, MYSQLI_OPT_LOCAL_INFILE, 1);

/* Now open the actual connection */
if (!mysqli_real_connect($mysqli, "localhost", "username", "password", "database")) {
    die("Connection failed: " . mysqli_connect_error());
}

echo "Connected successfully";
?>

Hier wird zunächst ein unverbundener Handle mit mysqli_init() erstellt, das Timeout und das Verhalten beim Laden lokaler Dateien mit mysqli_options() konfiguriert und erst dann mit mysqli_real_connect() verbunden. Das Verbindungsergebnis wird mit mysqli_connect_error() geprüft, das eine Beschreibung des letzten Verbindungsfehlers zurückgibt.

Einen Befehl direkt nach dem Verbinden ausführen

MYSQLI_INIT_COMMAND ist nützlich, wenn jede Verbindung in einem bekannten Zustand beginnen soll — zum Beispiel um einen Session-Zeichensatz oder eine Zeitzone zu erzwingen. Die Anweisung wird nach jedem Verbinden und Wiederverbinden ausgeführt:

<?php
$mysqli = mysqli_init();

mysqli_options($mysqli, MYSQLI_INIT_COMMAND, "SET NAMES 'utf8mb4'");

if (!mysqli_real_connect($mysqli, "localhost", "username", "password", "database")) {
    die("Connection failed: " . mysqli_connect_error());
}
?>

Häufige Fallstricke

  • Vor dem Verbinden aufrufen. Dies ist der häufigste Fehler. Verwenden Sie mysqli_init() + mysqli_options() + mysqli_real_connect(), niemals das einfache mysqli_connect().
  • SSL ist separat. Zertifikat-, Schlüssel- und CA-Pfade werden mit mysqli_ssl_set() konfiguriert, nicht mit mysqli_options().
  • MYSQLI_OPT_LOCAL_INFILE ist eine Sicherheitseinstellung. Aktivieren Sie es nur, wenn Sie LOAD DATA LOCAL INFILE tatsächlich benötigen; die Aktivierung kann einem kompromittierten Server ermöglichen, lokale Dateien zu lesen.
  • Den Rückgabewert prüfen. mysqli_options() gibt bei nicht unterstützten Optionen false zurück, daher lohnt es sich, dies zu überprüfen, wenn eine Option stillschweigend keine Wirkung hat.

Fazit

mysqli_options() ermöglicht die Feinabstimmung einer MySQLi-Verbindung — Timeouts, das Laden lokaler Dateien und Startbefehle — aber nur innerhalb der Sequenz mysqli_init()mysqli_options()mysqli_real_connect(). Um mit MySQLi-Verbindungen fortzufahren, siehe mysqli_connect() und wie Fehler mit mysqli_connect_error() diagnostiziert werden.

Übungen

Übung
Welche Reihenfolge wendet Optionen korrekt an, bevor eine MySQLi-Verbindung geöffnet wird?
Welche Reihenfolge wendet Optionen korrekt an, bevor eine MySQLi-Verbindung geöffnet wird?
Was this page helpful?