kill
Aprende a usar mysqli_kill() en PHP para terminar conexiones MySQL por ID de hilo, con sintaxis, parámetros y ejemplos prácticos.
En este artículo, nos centraremos en la función mysqli_kill() en PHP, que solicita al servidor MySQL que termine una conexión de cliente identificada por su ID de hilo (conexión). Cubriremos su sintaxis, parámetros, ambos estilos de llamada y las situaciones reales en las que tiene sentido terminar una conexión.
Qué hace mysqli_kill()
mysqli_kill() es una función incorporada de PHP que envía un comando KILL al servidor MySQL para un ID de hilo determinado — el identificador numérico que MySQL asigna a cada conexión de cliente. Es el equivalente programático de ejecutar KILL <id>; en el shell de MySQL.
Algunos puntos importantes a entender antes de usarla:
- El ID de hilo que se pasa debe pertenecer a una conexión en el mismo servidor MySQL. Normalmente se obtiene con
mysqli_thread_id(). - Terminar una conexión la finaliza en el lado del servidor, pero el objeto PHP
mysqlilocal permanece en el ámbito. Aun así, se debe llamar amysqli_close()para liberarlo correctamente. - El usuario de la base de datos necesita el privilegio
SUPER(oCONNECTION_ADMIN) para terminar conexiones que no le pertenecen.
¿Cuándo usarla?
Raramente se termina la propia conexión — cerrarla con mysqli_close() es más sencillo. mysqli_kill() resulta útil cuando se tienen más de una conexión y es necesario terminar una diferente:
- Una consulta de larga duración en otra conexión está bloqueando bloqueos y debe detenerse.
- Un script de monitoreo o administración necesita eliminar una conexión obsoleta o desbocada por ID.
- Se desea liberar una sesión específica tras detectar actividad inesperada o no autorizada.
Sintaxis y parámetros
mysqli_kill() funciona tanto en el estilo procedimental como en el orientado a objetos de MySQLi.
// Procedural
mysqli_kill(mysqli $mysql, int $thread_id): bool
// Object-oriented
$mysqli->kill(int $thread_id): boolParámetros:
mysql— Un objeto de conexión MySQLi (solo en estilo procedimental).thread_id— El ID de conexión/hilo a terminar.
Valor de retorno: Devuelve true en caso de éxito y false en caso de fallo.
Ejemplo procedimental
El siguiente ejemplo abre una conexión, obtiene su propio ID de hilo, lo termina y luego cierra el manejador:
<?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);
?>Aquí nos conectamos con mysqli_connect(), verificamos el resultado para evitar errores fatales en llamadas posteriores (ver mysqli_connect_error()), leemos el ID de hilo actual con mysqli_thread_id() y lo pasamos a mysqli_kill(). Tras la terminación, la conexión del lado del servidor ya no existe, por lo que cualquier mysqli_query() posterior en este manejador fallaría — simplemente lo cerramos.
Ejemplo orientado a objetos
La misma lógica en estilo OOP, terminando una segunda conexión desde la primera — el patrón habitual en el mundo real:
<?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();
?>Conclusión
mysqli_kill() solicita al servidor MySQL que termine una conexión por su ID de hilo, devolviendo true en caso de éxito y false en caso de fallo. Su verdadero valor se muestra cuando una conexión adicional debe detenerse — para liberar bloqueos, detener una consulta desbocada o finalizar una sesión sospechosa — mientras que un simple mysqli_close() sigue siendo la herramienta adecuada para terminar una conexión propia.