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ètre | Description |
|---|---|
$mysql | Un lien de connexion retourné par mysqli_connect() ou new mysqli(...). |
$flags | Une 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ègeSUPER). Un utilisateur d'application standard obtiendra une erreur « accès refusé » etmysqli_refresh()retournerafalse.
Drapeaux de rafraîchissement
L'argument $flags sélectionne ce que l'on vide. Les constantes les plus courantes sont :
| Drapeau | Ce qu'il vide |
|---|---|
MYSQLI_REFRESH_GRANT | Recharge les tables de droits (équivalent à FLUSH PRIVILEGES). |
MYSQLI_REFRESH_LOG | Vide les journaux d'erreurs, de requêtes et binaires (rotation des journaux). |
MYSQLI_REFRESH_TABLES | Vide toutes les tables ouvertes et ferme leurs fichiers (FLUSH TABLES). |
MYSQLI_REFRESH_HOSTS | Efface le cache d'hôtes interne. |
MYSQLI_REFRESH_STATUS | Réinitialise les variables d'état de session/serveur. |
MYSQLI_REFRESH_THREADS | Vide le cache de threads. |
MYSQLI_REFRESH_REPLICA | Ré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 renvoiefalse. Vérifiez toujours la valeur de retour et lisezmysqli_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_MASTERont été renommées enMYSQLI_REFRESH_REPLICA/MYSQLI_REFRESH_SOURCEdans 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(ouFLUSH PRIVILEGES) viamysqli_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.