PHP mysqli_refresh() Funktion
Erfahren Sie, wie PHP's mysqli_refresh() MySQL-Server-Caches, Tabellen, Logs und Berechtigungen leert. Mit Flags, prozeduraler und OOP-Syntax.
Einführung
MySQLi ist die PHP-Erweiterung für die Kommunikation mit MySQL-Datenbanken. Die Funktion mysqli_refresh() ermöglicht es Ihnen, den Server aufzufordern, interne Ressourcen zu leeren — Caches, Tabellendefinitionen, Logs oder die Grant-Tabellen, die Benutzerberechtigungen enthalten. Sie ist das programmatische Äquivalent zur Ausführung eines FLUSH-SQL-Befehls.
Diese Seite erklärt, was mysqli_refresh() tut, welche Flags sie akzeptiert, wie sie sowohl im prozeduralen als auch im objektorientierten Code aufgerufen wird, und welchen Berechtigungsfehler die meisten Erstbenutzer überrascht.
Syntax
mysqli_refresh() nimmt die offene Verbindung und eine Bitmaske aus Refresh-Flags entgegen und gibt bei Erfolg true oder bei Fehler false zurück.
mysqli_refresh(mysqli $mysql, int $flags): bool| Parameter | Beschreibung |
|---|---|
$mysql | Ein Verbindungs-Link, der von mysqli_connect() oder new mysqli(...) zurückgegeben wird. |
$flags | Eine oder mehrere MYSQLI_REFRESH_*-Konstanten, kombiniert mit dem bitweisen OR-Operator (|). |
Im objektorientierten Stil wird derselbe Aufruf als $mysqli->refresh($flags) geschrieben.
Erforderliche Berechtigung. Das Leeren ist ein privilegierter Vorgang. Das MySQL-Konto, mit dem Sie sich verbinden, benötigt das
RELOAD-Privileg (historisch dasSUPER-Privileg). Ein normaler Anwendungsbenutzer erhält den Fehler „Zugriff verweigert" undmysqli_refresh()gibtfalsezurück.
Refresh-Flags
Das Argument $flags legt fest, was geleert werden soll. Die häufigsten Konstanten sind:
| Flag | Was geleert wird |
|---|---|
MYSQLI_REFRESH_GRANT | Lädt die Grant-Tabellen neu (entspricht FLUSH PRIVILEGES). |
MYSQLI_REFRESH_LOG | Leert Fehler-, Abfrage- und Binär-Logs (Log-Rotation). |
MYSQLI_REFRESH_TABLES | Leert alle offenen Tabellen und schließt deren Dateien (FLUSH TABLES). |
MYSQLI_REFRESH_HOSTS | Löscht den internen Host-Cache. |
MYSQLI_REFRESH_STATUS | Setzt die Sitzungs-/Server-Statusvariablen zurück. |
MYSQLI_REFRESH_THREADS | Leert den Thread-Cache. |
MYSQLI_REFRESH_REPLICA | Setzt das Replikat zurück (früher MYSQLI_REFRESH_SLAVE). |
Kombinieren Sie Flags mit |, um mehrere Aktionen in einem Netzwerkzugriff durchzuführen:
mysqli_refresh($conn, MYSQLI_REFRESH_TABLES | MYSQLI_REFRESH_LOG);Verwendung von mysqli_refresh()
Öffnen Sie eine Verbindung, rufen Sie mysqli_refresh() mit dem gewünschten Flag auf und überprüfen Sie den booleschen Rückgabewert. Hier ist ein vollständiges prozedurales Beispiel:
<?php
// Create a connection to the MySQL server
$conn = mysqli_connect("localhost", "username", "password", "database");
// Check connection
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
// Flush server tables and caches
// Requires SUPER or FLUSH privilege
if (mysqli_refresh($conn, MYSQLI_REFRESH_TABLES)) {
echo "Tables flushed successfully.";
} else {
echo "Refresh failed: " . mysqli_error($conn);
}
// To fetch updated data, re-execute the query
$result = mysqli_query($conn, "SELECT * FROM table");
if (!$result) {
die("Query failed: " . mysqli_error($conn));
}
// Process the results
if ($result) {
while ($row = mysqli_fetch_assoc($result)) {
// Process each row of data
}
mysqli_free_result($result);
}
// Close the connection
mysqli_close($conn);
?>Die Verbindung wird mit mysqli_connect() hergestellt. mysqli_refresh() leert dann die offenen Tabellen, das Ergebnis wird überprüft und die Daten werden mit mysqli_query() und mysqli_fetch_assoc() neu gelesen. Abschließend wird die Verbindung mit mysqli_close() freigegeben.
Objektorientierter Stil
Wenn Sie die OOP-Schnittstelle bevorzugen, ist die Verbindung ein mysqli-Objekt und refresh() ist eine Methode darauf:
<?php
$mysqli = new mysqli("localhost", "username", "password", "database");
if ($mysqli->connect_errno) {
die("Connection failed: " . $mysqli->connect_error);
}
if ($mysqli->refresh(MYSQLI_REFRESH_TABLES | MYSQLI_REFRESH_LOG)) {
echo "Tables and logs flushed successfully.";
} else {
echo "Refresh failed: " . $mysqli->error;
}
$mysqli->close();
?>Beide Stile verhalten sich identisch; die OOP-Version liest error und connect_error der Verbindung als Objekteigenschaften statt über mysqli_error().
Anwendungsfälle der MySQLi-Refresh-Funktion
Die Funktion mysqli_refresh() ist für eine Vielzahl von Szenarien wertvoll, darunter:
1. Tabellen-Cache-Verwaltung
Die Funktion mysqli_refresh() kann verwendet werden, um Tabellen-Caches zu leeren. Dies ist hilfreich, wenn sich Tabellenstrukturen geändert haben und der Server die Tabellendefinitionen neu laden soll.
2. Log-Verwaltung
Die Funktion kann allgemeine, langsame oder Binär-Logs leeren. Dies ist nützlich für die Datenbankwartung und zur Sicherstellung einer ordnungsgemäßen Log-Rotation.
3. Berechtigungen neu laden
Entwickler können sie verwenden, um Grant-Tabellen nach Änderungen an Benutzerberechtigungen neu zu laden und sicherzustellen, dass Berechtigungsaktualisierungen sofort wirksam werden.
Vorteile der MySQLi-Refresh-Funktion
Die Funktion mysqli_refresh() bietet PHP-Entwicklern mehrere Vorteile:
1. Effiziente Cache-Verwaltung
Die Funktion ermöglicht es Entwicklern, Server-Caches auf Abruf zu leeren. Dies ist nützlich in Anwendungen, die sofortige Aktualisierungen von Tabellendefinitionen oder Abfrage-Caches erfordern.
2. Verbesserte Datenbankwartung
Die Funktion stellt sicher, dass Logs und Caches ordnungsgemäß verwaltet werden, was zu besserer Serverleistung und einfacherer Fehlerbehebung führen kann.
3. Sofortige Berechtigungsaktualisierungen
Die Funktion ist wertvoll bei der Verwaltung von Benutzerberechtigungen. Durch das Neuladen der Grant-Tabellen kann die Anwendung sicherstellen, dass alle Benutzer mit den aktuellsten Zugriffsrechten arbeiten.
Häufige Fallstricke
- Zugriff verweigert. Die häufigste Überraschung: Ein normales App-Konto besitzt nicht das
RELOAD/SUPER-Privileg, sodass der Aufruffalsezurückgibt. Überprüfen Sie immer den Rückgabewert und lesen Siemysqli_error(). - Kein HTTP-„Refresh".
mysqli_refresh()hat nichts mit dem Neuladen einer Webseite zu tun. Es leert den serverseitigen MySQL-Zustand. Um Daten in Ihr Skript neu einzulesen, müssen Sie die Abfrage erneut ausführen — das Leeren gibt keine Zeilen zurück. - Umbenannte Konstanten.
MYSQLI_REFRESH_SLAVE/MYSQLI_REFRESH_MASTERwurden in neueren MySQL/PHP-Builds inMYSQLI_REFRESH_REPLICA/MYSQLI_REFRESH_SOURCEumbenannt; bevorzugen Sie auf modernen Systemen die neuen Namen. - SQL bevorzugen wenn möglich. Die meisten Codes können einfach
FLUSH TABLES(oderFLUSH PRIVILEGES) übermysqli_query()ausführen;mysqli_refresh()ist ein praktischer Wrapper um dieselben Flush-Befehle.
Fazit
Die Funktion mysqli_refresh() bietet eine unkomplizierte Möglichkeit, FLUSH-Befehle an den MySQL-Server zu senden, und hilft Entwicklern, Ressourcen zu verwalten und Definitionen nach strukturellen Änderungen oder Wartungsaufgaben neu zu laden. Mit Unterstützung für mehrere Refresh-Flags und sofortiger Wirkung auf Caches, Logs und Berechtigungen bleibt sie ein praktisches Werkzeug für die Datenbankadministration in PHP-Anwendungen.
Wir hoffen, dass dieser Leitfaden geklärt hat, wie die Funktion mysqli_refresh() effektiv eingesetzt werden kann. Durch Befolgen der hier beschriebenen Schritte und Best Practices können Entwickler optimale Datenbankleistung und Sicherheit aufrechterhalten.