Guide complet sur la fonction mysqli_thread_id en PHP
Découvrez la fonction mysqli_thread_id() en PHP : ce qu'elle retourne, quand l'utiliser et comment gérer les connexions MySQL efficacement.
Lorsque vous travaillez avec des bases de données MySQL en PHP, l'extension mysqli expose de nombreuses fonctions pour gérer les connexions et les requêtes. L'une d'elles est mysqli_thread_id(), qui retourne l'identifiant de thread — un numéro que le serveur MySQL attribue à votre connexion tant qu'elle reste ouverte.
Ce guide explique ce qu'est cet identifiant de thread, dans quels cas il est réellement utile, comment appeler la fonction correctement (styles procédural et orienté objet), et les pièges à éviter.
Qu'est-ce que la fonction mysqli_thread_id ?
mysqli_thread_id() retourne l'identifiant unique de connexion (thread) que le serveur MySQL a attribué à la connexion courante. Ce même numéro est celui que SELECT CONNECTION_ID() renvoie, et c'est la valeur que vous passez à une instruction KILL pour terminer une connexion bloquée.
mysqli_thread_id(mysqli $mysql): int- Paramètre —
$mysql: un objet de connexion retourné parmysqli_connect()(ou une instancenew mysqli(...)). - Valeur de retour — un
int: l'identifiant de thread pour la connexion.
L'identifiant n'est valide que pendant la durée de vie de cette connexion. Dès que la connexion se ferme (ou se coupe et se reconnecte), MySQL attribue un nouvel identifiant de thread — ne le mettez donc jamais en cache entre les requêtes et ne supposez pas qu'il est stable.
L'appel procédural
mysqli_thread_id($connection)et le style objet$connection->thread_idsont équivalents.
Quand l'utiliser ?
L'identifiant de thread est un outil de diagnostic et d'administration, pas quelque chose dont la plupart du code CRUD a besoin. Faites-y appel lorsque vous souhaitez :
- Tuer une connexion bloquée. Capturez l'identifiant, puis depuis une autre session exécutez
KILL <id>pour annuler une requête qui s'exécute depuis trop longtemps. - Tracer une connexion dans le journal des requêtes lentes ou dans
SHOW PROCESSLIST, où chaque ligne est identifiée par ce même identifiant. - Déboguer le pooling de connexions / les connexions persistantes, où il vous aide à confirmer si vous réutilisez une connexion ou en ouvrez une nouvelle.
Comment utiliser mysqli_thread_id
1. Ouvrir une connexion
mysqli_thread_id() nécessite une connexion active, donc connectez-vous d'abord :
<?php
$host = 'localhost';
$user = 'username';
$password = 'password';
$database = 'mydatabase';
$connection = mysqli_connect($host, $user, $password, $database);
if (!$connection) {
die('Connection failed: ' . mysqli_connect_error());
}2. Lire l'identifiant de thread
Avec une connexion valide, appelez la fonction et utilisez la valeur :
<?php
$threadId = mysqli_thread_id($connection);
echo "Thread ID: " . $threadId; // e.g. Thread ID: 42L'équivalent orienté objet lit la propriété au lieu d'appeler une fonction :
<?php
$mysqli = new mysqli($host, $user, $password, $database);
$threadId = $mysqli->thread_id;
echo "Thread ID: " . $threadId;3. Utiliser l'identifiant pour tuer la connexion (optionnel)
Un cas d'usage courant consiste à capturer l'identifiant pour qu'une autre session puisse terminer celle-ci si elle se bloque :
<?php
$threadId = mysqli_thread_id($connection);
// From another connection you could now run:
// KILL 42;
// mysqli_kill() does this for the current connection object:
mysqli_kill($connection, $threadId);Pièges courants
- Ne mettez pas l'identifiant en cache. Il change à chaque fois que la connexion est rétablie, donc le stocker dans une session ou une base de données n'a aucun sens après une reconnexion.
- Passez une connexion valide. Appeler la fonction avec une connexion échouée ou déjà fermée déclenche un avertissement/erreur — vérifiez toujours le résultat de
mysqli_connect()en premier, comme indiqué ci-dessus. - Il identifie la connexion, pas la requête PHP. Deux scripts partageant une connexion persistante peuvent rapporter le même identifiant de thread ; deux requêtes sur des connexions séparées seront différentes.
Conclusion
mysqli_thread_id() vous donne l'identifiant du serveur MySQL pour la connexion courante — la même valeur utilisée par CONNECTION_ID(), SHOW PROCESSLIST et KILL. C'est un outil petit mais pratique pour surveiller, déboguer et gérer les connexions. N'oubliez pas que l'identifiant naît et meurt avec la connexion, donc lisez-le quand vous en avez besoin plutôt que de le mettre en cache.
Pour les fonctions d'aide à la connexion associées, consultez Se connecter à MySQL et le guide complet Base de données PHP MySQL.