kill
Neste artigo, focamos na função mysqli_kill() do PHP, usada para encerrar uma conexão de cliente MySQL, com sintaxe, parâmetros e exemplos práticos.
Neste artigo, vamos focar na função mysqli_kill() do PHP, que solicita ao servidor MySQL que encerre uma conexão de cliente identificada pelo seu ID de thread (conexão). Abordaremos sua sintaxe, parâmetros, ambos os estilos de chamada e as situações reais em que encerrar uma conexão faz sentido.
O que mysqli_kill() faz
mysqli_kill() é uma função nativa do PHP que envia um comando KILL ao servidor MySQL para um determinado ID de thread — o identificador numérico que o MySQL atribui a cada conexão de cliente. É o equivalente programático de executar KILL <id>; no shell do MySQL.
Alguns pontos importantes a entender antes de usá-la:
- O ID de thread que você passa deve pertencer a uma conexão no mesmo servidor MySQL. Você normalmente o obtém com
mysqli_thread_id(). - Encerrar uma conexão a termina no lado do servidor, mas o objeto PHP
mysqlilocal permanece no escopo. Você ainda deve chamarmysqli_close()para liberá-lo corretamente. - O usuário do banco de dados precisa do privilégio
SUPER(ouCONNECTION_ADMIN) para encerrar conexões que não sejam suas.
Quando você usaria isso?
Você raramente encerra sua própria conexão — fechá-la com mysqli_close() é mais simples. mysqli_kill() mostra seu valor quando você tem mais de uma conexão e precisa encerrar uma diferente:
- Uma consulta de longa duração em outra conexão está mantendo bloqueios e precisa ser interrompida.
- Um script de monitoramento ou administração precisa eliminar uma conexão obsoleta ou descontrolada pelo ID.
- Você quer liberar uma sessão específica após detectar atividade inesperada ou não autorizada.
Sintaxe e parâmetros
mysqli_kill() funciona tanto no estilo procedural quanto no orientado a objetos do MySQLi.
// Procedural
mysqli_kill(mysqli $mysql, int $thread_id): bool
// Object-oriented
$mysqli->kill(int $thread_id): boolParâmetros:
mysql— Um objeto de conexão MySQLi (somente no estilo procedural).thread_id— O ID de conexão/thread a ser encerrado.
Valor de retorno: Retorna true em caso de sucesso, false em caso de falha.
Exemplo procedural
O exemplo abaixo abre uma conexão, consulta seu próprio ID de thread, o encerra e depois fecha o identificador:
<?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);
?>Aqui nos conectamos com mysqli_connect(), verificamos o resultado para evitar erros fatais em chamadas posteriores (veja mysqli_connect_error()), lemos o ID de thread atual com mysqli_thread_id() e o passamos para mysqli_kill(). Após o encerramento, a conexão no lado do servidor não existe mais, portanto qualquer mysqli_query() posterior neste identificador falharia — simplesmente o fechamos.
Exemplo orientado a objetos
A mesma lógica no estilo OOP, encerrando uma segunda conexão a partir da primeira — o padrão comum no 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();
?>Conclusão
mysqli_kill() solicita ao servidor MySQL que encerre uma conexão pelo seu ID de thread, retornando true em caso de sucesso e false em caso de falha. Seu real valor aparece quando uma conexão adicional precisa ser interrompida — para liberar bloqueios, eliminar uma consulta descontrolada ou encerrar uma sessão suspeita — enquanto um simples mysqli_close() continua sendo a ferramenta certa para encerrar uma conexão que você mesmo possui.