W3docs

kill

Découvrez la fonction mysqli_kill() en PHP pour terminer une connexion MySQL cliente par son identifiant de thread.

Dans cet article, nous allons nous concentrer sur la fonction mysqli_kill() en PHP, qui demande au serveur MySQL de terminer une connexion cliente identifiée par son ID de thread (connexion). Nous aborderons sa syntaxe, ses paramètres, les deux styles d'appel, et les situations réelles où tuer une connexion est pertinent.

Ce que fait mysqli_kill()

mysqli_kill() est une fonction PHP intégrée qui envoie une commande KILL au serveur MySQL pour un ID de thread donné — l'identifiant numérique que MySQL attribue à chaque connexion cliente. C'est l'équivalent programmatique d'exécuter KILL <id>; dans le shell MySQL.

Quelques points à comprendre avant de l'utiliser :

  • L'ID de thread que vous passez doit appartenir à une connexion sur le même serveur MySQL. Vous l'obtenez généralement avec mysqli_thread_id().
  • Tuer une connexion la termine côté serveur, mais l'objet PHP mysqli local reste dans la portée. Vous devriez quand même appeler mysqli_close() pour le libérer proprement.
  • Votre utilisateur de base de données a besoin du privilège SUPER (ou CONNECTION_ADMIN) pour tuer des connexions qu'il ne possède pas.

Quand l'utiliser ?

Vous tuez rarement votre propre connexion — la fermer avec mysqli_close() est plus simple. mysqli_kill() prend tout son sens lorsque vous avez plus d'une connexion et devez en terminer une autre :

  • Une requête longue sur une autre connexion maintient des verrous et doit être arrêtée.
  • Un script de surveillance ou d'administration doit supprimer une connexion obsolète ou incontrôlable par ID.
  • Vous souhaitez libérer une session spécifique après avoir détecté une activité inattendue ou non autorisée.

Syntaxe et paramètres

mysqli_kill() fonctionne dans les styles MySQLi procédural et orienté objet.

// Procedural
mysqli_kill(mysqli $mysql, int $thread_id): bool

// Object-oriented
$mysqli->kill(int $thread_id): bool

Paramètres :

  • mysql — Un objet de connexion MySQLi (style procédural uniquement).
  • thread_id — L'ID de connexion/thread à terminer.

Valeur de retour : Retourne true en cas de succès, false en cas d'échec.

Exemple procédural

L'exemple ci-dessous ouvre une connexion, récupère son propre ID de thread, le tue, puis ferme le handle :

<?php
$mysqli = mysqli_connect("localhost", "username", "password", "database");

if (!$mysqli) {
    die("Connection failed: " . mysqli_connect_error());
}

$thread_id = mysqli_thread_id($mysqli);

if (mysqli_kill($mysqli, $thread_id)) {
    echo "Connection {$thread_id} was killed on the server.";
}

mysqli_close($mysqli);
?>

Ici, nous nous connectons avec mysqli_connect(), vérifions le résultat pour éviter les erreurs fatales sur les appels suivants (voir mysqli_connect_error()), lisons l'ID de thread actuel avec mysqli_thread_id(), et le passons à mysqli_kill(). Après le kill, la connexion côté serveur est terminée, donc tout appel ultérieur à mysqli_query() sur ce handle échouerait — nous le fermons simplement.

Exemple orienté objet

La même logique en style OOP, tuant une seconde connexion depuis la première — le cas d'usage courant en situation réelle :

<?php
$admin  = new mysqli("localhost", "username", "password", "database");
$worker = new mysqli("localhost", "username", "password", "database");

if ($admin->connect_errno || $worker->connect_errno) {
    die("Connection failed.");
}

// Suppose $worker is running something we need to stop.
$worker_id = $worker->thread_id;

if ($admin->kill($worker_id)) {
    echo "Killed worker connection {$worker_id}.";
}

$admin->close();
$worker->close();
?>

Conclusion

mysqli_kill() demande au serveur MySQL de terminer une connexion par son ID de thread, retournant true en cas de succès et false en cas d'échec. Sa vraie valeur apparaît lorsqu'une connexion supplémentaire doit être arrêtée — pour libérer des verrous, interrompre une requête incontrôlable, ou mettre fin à une session suspecte — tandis qu'un simple mysqli_close() reste l'outil approprié pour terminer une connexion que vous possédez.

Pratique

Pratique
Quelle fonction est utilisée en PHP pour terminer l'exécution des scripts ?
Quelle fonction est utilisée en PHP pour terminer l'exécution des scripts ?
Was this page helpful?