W3docs

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 mysqli local permanece en el ámbito. Aun así, se debe llamar a mysqli_close() para liberarlo correctamente.
  • El usuario de la base de datos necesita el privilegio SUPER (o CONNECTION_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): bool

Pará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.

Práctica

Práctica
¿Qué función se usa en PHP para terminar la ejecución de los scripts?
¿Qué función se usa en PHP para terminar la ejecución de los scripts?
Was this page helpful?