Signatur
Beschreibung
mysqli_thread_id() liefert die interne Thread-ID, die der MySQL-Server der aktuellen Verbindung zugewiesen hat. Jede Verbindung zum MySQL-Server erhält eine eindeutige Thread-ID, die innerhalb der Laufzeit des Servers monoton steigt.
Die zurückgegebene ID kann zusammen mit mysqli_kill() verwendet werden, um eine laufende, hängende Abfrage oder Verbindung serverseitig zu beenden. Das ist nützlich, wenn z. B. ein langlaufendes Statement abgebrochen werden soll, ohne die gesamte Anwendung neu starten zu müssen.
Wichtig: Die Thread-ID ist nur für die Lebensdauer der aktuellen Verbindung gültig. Bei erneuter Verbindung (z. B. nach einem Reconnect) erhält man eine neue Thread-ID. Daher sollte die ID immer direkt vor der Nutzung abgefragt werden.
Die Funktion steht sowohl als prozedurale Variante (mysqli_thread_id($mysql)) als auch als objektorientierte Methode ($mysql->thread_id) zur Verfügung.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $mysql Pflicht | mysqli | Eine aktive MySQL-Verbindung, die mit mysqli_connect() oder new mysqli() erzeugt wurde. |
Rückgabewert
mysqli_kill() übergeben werden.Beispiele
Thread-ID abfragen und ausgeben
<?php
$mysqli = new mysqli('localhost', 'benutzer', 'geheim', 'testdb');
if ($mysqli->connect_errno) {
die('Verbindungsfehler: ' . $mysqli->connect_error);
}
// Prozedurale Variante
$threadId = mysqli_thread_id($mysqli);
echo 'Thread-ID (prozedural): ' . $threadId . PHP_EOL;
// Objektorientierte Variante
echo 'Thread-ID (OOP): ' . $mysqli->thread_id . PHP_EOL;
$mysqli->close();
Laufende Abfrage über Thread-ID beenden
<?php
$mysqli = new mysqli('localhost', 'benutzer', 'geheim', 'testdb');
if ($mysqli->connect_errno) {
die('Verbindungsfehler: ' . $mysqli->connect_error);
}
// Thread-ID der aktuellen Verbindung speichern
$threadId = $mysqli->thread_id;
echo 'Aktuelle Thread-ID: ' . $threadId . PHP_EOL;
// Eine zweite Verbindung nutzen, um die erste zu beenden
$admin = new mysqli('localhost', 'admin', 'admingeheim', 'testdb');
if (!$admin->connect_errno) {
if ($admin->kill($threadId)) {
echo 'Thread ' . $threadId . ' wurde erfolgreich beendet.' . PHP_EOL;
} else {
echo 'Fehler beim Beenden des Threads: ' . $admin->error . PHP_EOL;
}
$admin->close();
}
$mysqli->close();
// Wichtig · Fallstricke
Reconnect-Verhalten: Wenn mysqli.reconnect in der php.ini aktiviert ist und die Verbindung automatisch neu aufgebaut wird, ändert sich die Thread-ID. Speichern Sie die ID daher nicht dauerhaft, sondern fragen Sie sie stets aktuell ab.
Berechtigungen: Um einen fremden Thread mit mysqli_kill() zu beenden, benötigt der MySQL-Benutzer das SUPER- oder CONNECTION_ADMIN-Privileg. Den eigenen Thread kann man ohne besondere Rechte beenden.
Sicherheitshinweis: Geben Sie Thread-IDs niemals direkt an Endnutzer weiter und verwenden Sie sie nicht ungeprüft aus Benutzereingaben, da ein Angreifer damit gezielt Verbindungen anderer Benutzer beenden könnte.