OUJOOD.COM
Poll() / mysqli_poll() en PHP
PHP Version: 5+
La fonction poll() (ou mysqli_poll() dans la version procédurale) permet de vérifier l'état d'une ou plusieurs connexions MySQLi. Elle est utile pour gérer des requêtes asynchrones, c'est-à-dire des requêtes qui sont exécutées en arrière-plan et qui ne bloquent pas le script PHP.
Définition et utilisation
La fonction poll() prend cinq paramètres :
- read : Un tableau contenant les connexions à vérifier pour les résultats en attente.
- error : Un tableau contenant les connexions sur lesquelles une erreur s'est produite.
- reject : Un tableau contenant les connexions qui ont été rejetées car aucune requête asynchrone n'y a été exécutée.
- seconds : Le nombre de secondes à attendre avant d'abandonner.
- microseconds : Le nombre de microsecondes à attendre avant d'abandonner.
La fonction poll() renvoie le nombre de connexions prêtes à l'emploi, ou false en cas d'erreur.
Syntaxes orientée objet et procédurale
La syntaxe orientée objet de la fonction poll() est la suivante :
$mysqli->poll(read, error, reject, seconds, microseconds);
La syntaxe procédurale est la suivante :
mysqli_poll(read, error, reject, seconds, microseconds);
Valeurs possibles et paramètres
- read : Le tableau read peut contenir des connexions MySQLi ou des objets MySQLi.
- error : Le tableau error peut contenir des connexions MySQLi ou des objets MySQLi.
- reject : Le tableau reject peut contenir des connexions MySQLi ou des objets MySQLi.
- seconds : La valeur de seconds doit être un nombre entier positif ou nul.
- microseconds : La valeur de microseconds doit être un nombre entier positif ou nul.
Exemples pratiques
Syntaxe orientée objet
Exemple : 📋 Copier le code
<?php // Déclaration d'une connexion MySQLi $mysqli = new mysqli('seveur', 'utilisateur, 'motDePasse', 'ma_base_de_données'); // Exécution d'une requête asynchrone $mysqli->query('SELECT 1', MYSQLI_ASYNC); // Vérification de l'état de la connexion $read = array($mysqli); $error = array(); $reject = array(); // Appel de la fonction poll() $results = $mysqli->poll($read, $error, $reject, 1, 0); // Traitement des résultats if ($results > 0) { // La requête est terminée foreach ($read as $connection) { $result = $connection->reap_async_query(); // ... } } else { // La requête n'est pas terminée }?>
Syntaxe procédurale
Exemple : 📋 Copier le code
<?php // Déclaration d'une connexion MySQLi $mysqli = new mysqli('seveur', 'utilisateur, 'motDePasse', 'ma_base_de_données'); // Exécution d'une requête asynchrone $mysqli->query('SELECT 1', MYSQLI_ASYNC); // Vérification de l'état de la connexion $read = array($mysqli); $error = array(); $reject = array(); // Appel de la fonction poll() $results = mysqli_poll($read, $error, $reject, 1, 0); // Traitement des résultats if ($results > 0) { // La requête est terminée foreach ($read as $connection) { $result = mysqli_reap_async_query($connection); // ... } } else { // La requête n'est pas terminée }?>
Astuces et conseils d'utilisation pratique
- La fonction poll() est utile pour gérer des requêtes asynchrones en boucle. Par exemple, vous pouvez utiliser la boucle while pour boucler tant que la fonction poll() renvoie une valeur supérieure à 0.
- La fonction poll() peut être utilisée pour gérer des requêtes asynchrones sur plusieurs connexions MySQLi.
- Vous pouvez utiliser la fonction reap_async_query() pour récupérer les résultats d'une requête asynchrone.
- La fonction mysqli_free_result() peut être utilisée pour libérer la mémoire utilisée par une requête asynchrone.
Paramètres obligatoires et facultatifs
Les paramètres read, error et reject sont obligatoires. Les paramètres seconds et microseconds sont facultatifs.
Exemple d'utilisation avec plusieurs connexions
Exemple : 📋 Copier le code
<?php // Déclaration de 3 connexions MySQLi $mysqli1 = new mysqli('seveur', 'utilisateur, 'motDePasse', 'ma_base_de_données'); $mysqli2 = new mysqli('seveur', 'utilisateur, 'motDePasse', 'ma_base_de_données'); $mysqli3 = new mysqli('seveur', 'utilisateur, 'motDePasse', 'ma_base_de_données'); // Exécution d'une requête asynchrone sur chaque connexion $mysqli1->query('SELECT 1', MYSQLI_ASYNC); $mysqli2->query('SELECT 2', MYSQLI_ASYNC); $mysqli3->query('SELECT 3', MYSQLI_ASYNC); // Vérification de l'état des connexions $read = array($mysqli1, $mysqli2, $mysqli3); $error = array(); $reject = array(); // Appel de la fonction poll() $results = mysqli_poll($read, $error, $reject, 1, 0); // Traitement des résultats if ($results > 0) { // Une ou plusieurs requêtes sont terminées foreach ($read as $connection) { $result = mysqli_reap_async_query($connection); // ... } } else { // Aucune requête n'est terminée }?>
Les bases de données peuvent être différentes dans le cas d'utilisation avec plusieurs connexions. La fonction poll() ne fait aucune distinction entre les connexions et les bases de données. Elle renvoie simplement un tableau contenant les connexions qui sont prêtes à l'emploi.
Par exemple, le code suivant exécute une requête asynchrone sur deux connexions différentes, chacune connectée à une base de données différente :
Exemple : 📋 Copier le code
<?php // Déclaration de deux connexions MySQLi $mysqli1 = new mysqli('localhost', 'root', 'password', 'database1'); $mysqli2 = new mysqli('localhost', 'root', 'password', 'database2'); // Exécution d'une requête asynchrone sur chaque connexion $mysqli1->query('SELECT 1', MYSQLI_ASYNC); $mysqli2->query('SELECT 2', MYSQLI_ASYNC); // Vérification de l'état des connexions $read = array($mysqli1, $mysqli2); $error = array(); $reject = array(); // Appel de la fonction poll() $results = mysqli_poll($read, $error, $reject, 1, 0); // Traitement des résultats if ($results > 0) { // Une ou plusieurs requêtes sont terminées foreach ($read as $connection) { $result = mysqli_reap_async_query($connection); // ... } } else { // Aucune requête n'est terminée } ?>
Dans cet exemple, les connexions $mysqli1 et $mysqli2 sont ajoutées au tableau $read. La fonction poll() renvoie un tableau contenant les deux connexions, car elles sont toutes deux prêtes à l'emploi.
Conclusion
La fonction poll() est une fonction puissante qui peut être utilisée pour gérer des requêtes asynchrones en PHP. Elle est utile pour améliorer les performances de vos scripts en exécutant des requêtes en arrière-plan sans bloquer le thread principal.