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 dennochmysqli_close()aufrufen, um es sauber freizugeben. - Ihr Datenbankbenutzer benötigt das Privileg
SUPER(oderCONNECTION_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): boolParameter:
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.