W3docs

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 mysqli local permanece no escopo. Você ainda deve chamar mysqli_close() para liberá-lo corretamente.
  • O usuário do banco de dados precisa do privilégio SUPER (ou CONNECTION_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): bool

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

Prática

Prática
Qual função é usada em PHP para encerrar a execução dos scripts?
Qual função é usada em PHP para encerrar a execução dos scripts?
Was this page helpful?