# L'extension mysqli et les connexions persistantes

L'idée derrière les connexions persistantes est que les connexions entre les clients et la base peuvent être réutilisés par un autre processus client, au lieu d'être détruits et recréés de nombreuses fois. Cela réduit le coût de création des connexions à chaque fois que l'une d'entre elle est requise, car les connexions sont mises en cache pour être recyclées.

Contrairement à l'extension MySQL, MySQLi ne fournit pas de fonction séparée pour ouvrir des connexions persistantes. Pour ouvrir une connexion persistante, vous devez ajouter `p:` au nom de l'hôte lors de la connexion.

Le problème des connexions persistantes est qu'elles peuvent être laissées dans un état imprévisible, par les clients. Par exemple, un verrou de table peut avoir été posé avant que le client ne se déconnecte inopinément. Un nouveau client va alors prendre la connexion, mais tel quel. Il faudrait alors que le nouveau venu effectue un nettoyage en profondeur de la connexion avant de pouvoir la réutiliser sans parasitage, ce qui est un inconvénient pour le programmeur.

La connexion persistante de l'extension `mysqli` fournit une méthode de nettoyage automatique. Le nettoyage est effectué par `mysqli` et inclut :

- L'annulation des transactions actives.

- La fermeture et destruction des tables temporaires.

- Le déverrouillage des tables

- La remise à la valeur par défaut les variables de sessions

- La libération des commandes préparées (cela arrive toujours avec PHP)

- La fermeture du gestionnaire

- La libération des verrous posés par GET_LOCK()

Cela assure que la connexion persistante est dans une condition correcte avant d'être remise dans le groupe de connexion, et qu'un client différent la reprenne.

L'extension `mysqli` effectue ce nettoyage e appelant automatiquement la fonction C `mysql_change_user()`.

Le nettoyage automatique a ses avantages et ses inconvénients. L'avantage est que le programmeurs n'a pas besoin de s'en inquiéter, car il est appelé automatiquement. Cependant, l'inconvénient est que ce code peut éventuellement être un peu plus lent, car il doit être appelé à chaque fois que la connexion est retournée dans le groupe d'attente.

Il est possible de désactiver le nettoyage du code, en compilant PHP avec l'option `MYSQLI_NO_CHANGE_USER_ON_PCONNECT`.

> Note:

> L'extension `mysqli` supporte les connexions persistantes avec le MySQL Native Driver et avec la bibliothèque MySQL.