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:
- Einen unverbundenen Handle mit
mysqli_init()erstellen. - Eine oder mehrere Optionen mit
mysqli_options()setzen. - 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 vonmysqli_init()zurückgegeben wird (noch nicht verbunden).$option— eine derMYSQLI_*-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
| Konstante | Werttyp | Zweck |
|---|---|---|
MYSQLI_OPT_CONNECT_TIMEOUT | integer (Sekunden) | Maximale Wartezeit beim Öffnen der Verbindung. |
MYSQLI_OPT_READ_TIMEOUT | integer (Sekunden) | Maximale Wartezeit auf ein Abfrageergebnis. |
MYSQLI_OPT_LOCAL_INFILE | 0 oder 1 | LOAD DATA LOCAL INFILE aktivieren oder deaktivieren. |
MYSQLI_INIT_COMMAND | string | Eine SQL-Anweisung, die nach dem Verbinden/Wiederverbinden automatisch ausgeführt wird. |
MYSQLI_OPT_INT_AND_FLOAT_NATIVE | 0 oder 1 | Integer- 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 einfachemysqli_connect(). - SSL ist separat. Zertifikat-, Schlüssel- und CA-Pfade werden mit
mysqli_ssl_set()konfiguriert, nicht mitmysqli_options(). MYSQLI_OPT_LOCAL_INFILEist eine Sicherheitseinstellung. Aktivieren Sie es nur, wenn SieLOAD DATA LOCAL INFILEtatsä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 Optionenfalsezurü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.