W3docs

kill

In diesem Artikel behandeln wir die Funktion mysqli_kill() in PHP, mit der eine MySQL-Client-Verbindung beendet werden kann. Syntax, Parameter und Beispiele.

In diesem Artikel befassen wir uns mit der Funktion mysqli_kill() in PHP, die den MySQL-Server auffordert, eine Client-Verbindung anhand ihrer Thread- (Verbindungs-) ID zu beenden. Wir behandeln die Syntax, Parameter, beide Aufrufstile und die praktischen Situationen, in denen das Beenden einer Verbindung sinnvoll ist.

Was macht mysqli_kill()?

mysqli_kill() ist eine eingebaute PHP-Funktion, die einen KILL-Befehl für eine bestimmte Thread-ID an den MySQL-Server sendet — den numerischen Bezeichner, den MySQL jeder Client-Verbindung zuweist. Sie ist das programmatische Äquivalent zur Ausführung von KILL <id>; in der MySQL-Shell.

Einige wichtige Punkte, die Sie vor der Verwendung verstehen sollten:

  • Die übergebene Thread-ID muss zu einer Verbindung auf demselben MySQL-Server gehören. Sie erhalten sie typischerweise mit mysqli_thread_id().
  • Das Beenden einer Verbindung terminiert sie auf der Serverseite, aber das lokale PHP-mysqli-Objekt bleibt im Scope. Sie sollten dennoch mysqli_close() aufrufen, um es sauber freizugeben.
  • Ihr Datenbankbenutzer benötigt das Privileg SUPER (oder CONNECTION_ADMIN), um Verbindungen zu beenden, die er nicht selbst besitzt.

Wann würden Sie es verwenden?

Sie beenden Ihre eigene Verbindung selten so — dafür ist mysqli_close() einfacher. mysqli_kill() kommt zum Einsatz, wenn Sie mehr als eine Verbindung haben und eine andere beenden müssen:

  • Eine lang laufende Abfrage auf einer anderen Verbindung hält Sperren und muss gestoppt werden.
  • Ein Monitoring- oder Admin-Skript muss eine veraltete oder außer Kontrolle geratene Verbindung anhand ihrer ID schließen.
  • Sie möchten eine bestimmte Sitzung freigeben, nachdem unerwartete oder unbefugte Aktivitäten festgestellt wurden.

Syntax und Parameter

mysqli_kill() funktioniert sowohl im prozeduralen als auch im objektorientierten MySQLi-Stil.

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

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

Parameter:

  • mysql — Ein MySQLi-Verbindungsobjekt (nur prozeduraler Stil).
  • thread_id — Die zu beendende Verbindungs-/Thread-ID.

Rückgabewert: Gibt true bei Erfolg und false bei einem Fehler zurück.

Prozedurales Beispiel

Das folgende Beispiel öffnet eine Verbindung, ermittelt die eigene Thread-ID, beendet sie und schließt dann das 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);
?>

Hier verbinden wir uns mit mysqli_connect(), prüfen das Ergebnis, um fatale Fehler bei späteren Aufrufen zu vermeiden (siehe mysqli_connect_error()), lesen die aktuelle Thread-ID mit mysqli_thread_id() und übergeben sie an mysqli_kill(). Nach dem Kill ist die serverseitige Verbindung weg, sodass jedes weitere mysqli_query() auf diesem Handle fehlschlagen würde — wir schließen es einfach.

Objektorientiertes Beispiel

Dieselbe Logik im OOP-Stil, wobei eine zweite Verbindung von der ersten aus beendet wird — das typische Praxismuster:

<?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();
?>

Fazit

mysqli_kill() fordert den MySQL-Server auf, eine Verbindung anhand ihrer Thread-ID zu beenden, und gibt bei Erfolg true und bei einem Fehler false zurück. Seinen eigentlichen Nutzen entfaltet es, wenn eine weitere Verbindung gestoppt werden muss — um Sperren aufzuheben, eine außer Kontrolle geratene Abfrage zu beenden oder eine verdächtige Sitzung zu schließen — während ein einfaches mysqli_close() das richtige Werkzeug bleibt, um eine eigene Verbindung zu beenden.

Übungen

Übung
Welche Funktion wird in PHP verwendet, um die Ausführung von Skripten zu beenden?
Welche Funktion wird in PHP verwendet, um die Ausführung von Skripten zu beenden?
Was this page helpful?