W3docs

Fonction PHP mysqli_refresh()

Apprenez à utiliser mysqli_refresh() en PHP pour vider les caches MySQL, tables, journaux et privilèges. Syntaxe procédurale et orientée objet.

Introduction

MySQLi est l'extension PHP permettant de communiquer avec les bases de données MySQL. La fonction mysqli_refresh() vous permet de demander au serveur de vider des ressources internes — caches, définitions de tables, journaux, ou les tables de droits qui stockent les privilèges des utilisateurs. C'est l'équivalent programmatique de l'exécution d'une instruction SQL FLUSH.

Cette page explique ce que fait mysqli_refresh(), les drapeaux qu'elle accepte, comment l'appeler en code procédural et orienté objet, et le piège lié aux privilèges qui surprend la plupart des utilisateurs novices.

Syntaxe

mysqli_refresh() prend la connexion ouverte et un masque de bits de drapeaux de rafraîchissement, et renvoie true en cas de succès ou false en cas d'échec.

mysqli_refresh(mysqli $mysql, int $flags): bool
ParamètreDescription
$mysqlUn lien de connexion retourné par mysqli_connect() ou new mysqli(...).
$flagsUne ou plusieurs constantes MYSQLI_REFRESH_* combinées avec l'opérateur OR binaire (|).

En style orienté objet, le même appel s'écrit $mysqli->refresh($flags).

Privilège requis. Le vidage est une opération privilégiée. Le compte MySQL avec lequel vous vous connectez doit disposer du privilège RELOAD (historiquement le privilège SUPER). Un utilisateur d'application standard obtiendra une erreur « accès refusé » et mysqli_refresh() retournera false.

Drapeaux de rafraîchissement

L'argument $flags sélectionne ce que l'on vide. Les constantes les plus courantes sont :

DrapeauCe qu'il vide
MYSQLI_REFRESH_GRANTRecharge les tables de droits (équivalent à FLUSH PRIVILEGES).
MYSQLI_REFRESH_LOGVide les journaux d'erreurs, de requêtes et binaires (rotation des journaux).
MYSQLI_REFRESH_TABLESVide toutes les tables ouvertes et ferme leurs fichiers (FLUSH TABLES).
MYSQLI_REFRESH_HOSTSEfface le cache d'hôtes interne.
MYSQLI_REFRESH_STATUSRéinitialise les variables d'état de session/serveur.
MYSQLI_REFRESH_THREADSVide le cache de threads.
MYSQLI_REFRESH_REPLICARéinitialise le réplica (anciennement MYSQLI_REFRESH_SLAVE).

Combinez les drapeaux avec | pour effectuer plusieurs actions en un seul aller-retour :

mysqli_refresh($conn, MYSQLI_REFRESH_TABLES | MYSQLI_REFRESH_LOG);

Comment utiliser mysqli_refresh()

Ouvrez une connexion, appelez mysqli_refresh() avec le drapeau souhaité, et vérifiez la valeur de retour booléenne. Voici un exemple procédural complet :

<?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);
?>

La connexion est établie avec mysqli_connect(). mysqli_refresh() vide ensuite les tables ouvertes, le résultat est vérifié, et les données sont relues avec mysqli_query() et mysqli_fetch_assoc(). Enfin, le lien est libéré avec mysqli_close().

Style orienté objet

Si vous préférez l'interface OOP, la connexion est un objet mysqli et refresh() est une méthode de cet objet :

<?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();
?>

Les deux styles se comportent de manière identique ; la version OOP lit simplement l'error et le connect_error de la connexion en tant que propriétés d'objet plutôt que via mysqli_error().

Cas d'utilisation de la fonction de rafraîchissement MySQLi

La fonction mysqli_refresh() est utile dans divers scénarios, notamment :

1. Gestion du cache de tables

La fonction mysqli_refresh() peut être utilisée pour vider les caches de tables. Cela est utile lorsque les structures de tables ont changé et que vous avez besoin que le serveur recharge les définitions de tables.

2. Gestion des journaux

La fonction peut vider les journaux généraux, lents ou binaires. Cela est utile pour la maintenance de la base de données et pour s'assurer que les fichiers journaux sont correctement renouvelés.

3. Rechargement des privilèges

Les développeurs peuvent l'utiliser pour recharger les tables de droits après avoir apporté des modifications aux privilèges des utilisateurs, garantissant ainsi que les mises à jour des permissions prennent effet immédiatement.

Avantages de la fonction de rafraîchissement MySQLi

La fonction mysqli_refresh() offre plusieurs avantages aux développeurs PHP :

1. Gestion efficace du cache

La fonction permet aux développeurs de vider les caches du serveur à la demande. Cela est utile dans les applications qui nécessitent des mises à jour immédiates des définitions de tables ou des caches de requêtes.

2. Maintenance améliorée de la base de données

La fonction garantit que les journaux et les caches sont correctement gérés, ce qui peut améliorer les performances du serveur et faciliter le dépannage.

3. Mises à jour immédiates des privilèges

La fonction est précieuse lors de la gestion des permissions des utilisateurs. En rechargeant les tables de droits, l'application peut s'assurer que tous les utilisateurs travaillent avec les droits d'accès les plus récents.

Pièges courants

  • Accès refusé. La surprise la plus fréquente : un compte d'application ordinaire manque du privilège RELOAD/SUPER, donc l'appel renvoie false. Vérifiez toujours la valeur de retour et lisez mysqli_error().
  • Ce n'est pas le "rafraîchissement" HTTP. mysqli_refresh() n'a rien à voir avec le rechargement d'une page web. Elle vide l'état MySQL côté serveur. Pour récupérer à nouveau des données dans votre script, vous devez réexécuter la requête — le vidage ne renvoie pas de lignes.
  • Constantes renommées. MYSQLI_REFRESH_SLAVE/MYSQLI_REFRESH_MASTER ont été renommées en MYSQLI_REFRESH_REPLICA/MYSQLI_REFRESH_SOURCE dans les versions récentes de MySQL/PHP ; préférez les nouveaux noms sur les installations modernes.
  • Préférez SQL lorsque c'est possible. La plupart du code peut simplement exécuter FLUSH TABLES (ou FLUSH PRIVILEGES) via mysqli_query() ; mysqli_refresh() est un wrapper pratique autour des mêmes commandes de vidage.

Conclusion

La fonction mysqli_refresh() fournit un moyen simple d'envoyer des commandes FLUSH au serveur MySQL, aidant les développeurs à gérer les ressources et à recharger les définitions après des changements structurels ou des tâches de maintenance. Avec la prise en charge de plusieurs drapeaux de rafraîchissement et un effet immédiat sur les caches, les journaux et les privilèges, elle reste un outil pratique pour l'administration de bases de données dans les applications PHP.

Nous espérons que ce guide vous a aidé à comprendre comment utiliser efficacement la fonction mysqli_refresh(). En suivant les étapes et les bonnes pratiques décrites ici, les développeurs peuvent maintenir des performances et une sécurité optimales de la base de données.

Pratique

Pratique
Que fait mysqli_refresh() en PHP ?
Que fait mysqli_refresh() en PHP ?
Was this page helpful?