W3docs

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
ParameterBeschreibung
$mysqlEin Verbindungs-Link, der von mysqli_connect() oder new mysqli(...) zurückgegeben wird.
$flagsEine 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 das SUPER-Privileg). Ein normaler Anwendungsbenutzer erhält den Fehler „Zugriff verweigert" und mysqli_refresh() gibt false zurück.

Refresh-Flags

Das Argument $flags legt fest, was geleert werden soll. Die häufigsten Konstanten sind:

FlagWas geleert wird
MYSQLI_REFRESH_GRANTLädt die Grant-Tabellen neu (entspricht FLUSH PRIVILEGES).
MYSQLI_REFRESH_LOGLeert Fehler-, Abfrage- und Binär-Logs (Log-Rotation).
MYSQLI_REFRESH_TABLESLeert alle offenen Tabellen und schließt deren Dateien (FLUSH TABLES).
MYSQLI_REFRESH_HOSTSLöscht den internen Host-Cache.
MYSQLI_REFRESH_STATUSSetzt die Sitzungs-/Server-Statusvariablen zurück.
MYSQLI_REFRESH_THREADSLeert den Thread-Cache.
MYSQLI_REFRESH_REPLICASetzt 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 Aufruf false zurückgibt. Überprüfen Sie immer den Rückgabewert und lesen Sie mysqli_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_MASTER wurden in neueren MySQL/PHP-Builds in MYSQLI_REFRESH_REPLICA/MYSQLI_REFRESH_SOURCE umbenannt; bevorzugen Sie auf modernen Systemen die neuen Namen.
  • SQL bevorzugen wenn möglich. Die meisten Codes können einfach FLUSH TABLES (oder FLUSH PRIVILEGES) über mysqli_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.

Übung

Übung
Was macht mysqli_refresh() in PHP?
Was macht mysqli_refresh() in PHP?
Was this page helpful?