Ein umfassender Leitfaden zur mysqli_thread_id-Funktion in PHP
Erfahren Sie, wie mysqli_thread_id() in PHP funktioniert, wann Sie die Funktion einsetzen und welche Fallstricke Sie vermeiden sollten.
Wenn Sie mit MySQL-Datenbanken in PHP arbeiten, stellt die mysqli-Erweiterung viele Funktionen zur Verwaltung von Verbindungen und Abfragen bereit. Eine davon ist mysqli_thread_id(), die die Thread-ID zurückgibt — eine Nummer, die der MySQL-Server Ihrer Verbindung zuweist, solange sie offen bleibt.
Dieser Leitfaden erklärt, was diese Thread-ID ist, wann sie tatsächlich nützlich ist, wie Sie die Funktion korrekt aufrufen (sowohl prozedural als auch objektorientiert) und welche Fallstricke Sie beachten sollten.
Was ist die mysqli_thread_id-Funktion?
mysqli_thread_id() gibt den eindeutigen Verbindungs-Identifier (Thread) zurück, den der MySQL-Server der aktuellen Verbindung zugewiesen hat. Diese Zahl ist identisch mit dem, was SELECT CONNECTION_ID() zurückliefert, und sie ist der Wert, den Sie an eine KILL-Anweisung übergeben, um eine blockierte Verbindung zu beenden.
mysqli_thread_id(mysqli $mysql): int- Parameter —
$mysql: ein Verbindungsobjekt, das vonmysqli_connect()zurückgegeben wird (oder einenew mysqli(...)-Instanz). - Rückgabewert — ein
int: die Thread-ID der Verbindung.
Die ID ist nur für die Lebensdauer dieser Verbindung gültig. Sobald die Verbindung geschlossen wird (oder abbricht und neu aufgebaut wird), vergibt MySQL eine neue Thread-ID — speichern Sie sie daher nie über mehrere Anfragen hinweg zwischen und nehmen Sie nicht an, dass sie stabil ist.
Der prozedurale Aufruf
mysqli_thread_id($connection)und der objektorientierte Stil$connection->thread_idsind gleichwertig.
Wann sollte ich sie verwenden?
Die Thread-ID ist ein Diagnose- und Verwaltungswerkzeug und wird von den meisten CRUD-Operationen nicht benötigt. Greifen Sie darauf zurück, wenn Sie Folgendes tun möchten:
- Eine blockierte Verbindung beenden. Erfassen Sie die ID und führen Sie aus einer anderen Sitzung heraus
KILL <id>aus, um eine lang laufende Abfrage abzubrechen. - Eine Verbindung im Slow-Query-Log verfolgen oder in
SHOW PROCESSLIST, wo jede Zeile durch diese ID gekennzeichnet ist. - Connection-Pooling oder persistente Verbindungen debuggen, wobei Sie damit prüfen können, ob eine Verbindung wiederverwendet oder eine neue geöffnet wird.
So verwenden Sie mysqli_thread_id
1. Eine Verbindung öffnen
mysqli_thread_id() benötigt eine aktive Verbindung — stellen Sie also zuerst eine Verbindung her:
<?php
$host = 'localhost';
$user = 'username';
$password = 'password';
$database = 'mydatabase';
$connection = mysqli_connect($host, $user, $password, $database);
if (!$connection) {
die('Connection failed: ' . mysqli_connect_error());
}2. Die Thread-ID auslesen
Mit einer gültigen Verbindung rufen Sie die Funktion auf und verwenden den Wert:
<?php
$threadId = mysqli_thread_id($connection);
echo "Thread ID: " . $threadId; // e.g. Thread ID: 42Das objektorientierte Äquivalent liest die Eigenschaft, anstatt eine Funktion aufzurufen:
<?php
$mysqli = new mysqli($host, $user, $password, $database);
$threadId = $mysqli->thread_id;
echo "Thread ID: " . $threadId;3. Die ID verwenden, um die Verbindung zu beenden (optional)
Ein häufiger Anwendungsfall in der Praxis ist das Erfassen der ID, damit eine andere Sitzung diese Verbindung beenden kann, falls sie hängt:
<?php
$threadId = mysqli_thread_id($connection);
// From another connection you could now run:
// KILL 42;
// mysqli_kill() does this for the current connection object:
mysqli_kill($connection, $threadId);Häufige Fallstricke
- Speichern Sie die ID nicht zwischen. Sie ändert sich jedes Mal, wenn die Verbindung neu aufgebaut wird — sie in einer Session oder Datenbank zu speichern ist nach einer erneuten Verbindung bedeutungslos.
- Übergeben Sie eine gültige Verbindung. Das Aufrufen der Funktion mit einer fehlgeschlagenen oder bereits geschlossenen Verbindung löst eine Warnung/einen Fehler aus — prüfen Sie stets das Ergebnis von
mysqli_connect()zuerst, wie oben gezeigt. - Sie identifiziert die Verbindung, nicht die PHP-Anfrage. Zwei Skripte, die eine persistente Verbindung teilen, können dieselbe Thread-ID melden; zwei Anfragen über separate Verbindungen unterscheiden sich.
Fazit
mysqli_thread_id() liefert den Identifier des MySQL-Servers für die aktuelle Verbindung — denselben Wert, der von CONNECTION_ID(), SHOW PROCESSLIST und KILL verwendet wird. Es ist ein kleines, aber nützliches Werkzeug zum Überwachen, Debuggen und Verwalten von Verbindungen. Denken Sie daran, dass die ID mit der Verbindung entsteht und endet — lesen Sie sie daher bei Bedarf aus, anstatt sie zwischenzuspeichern.
Für verwandte Verbindungs-Hilfsmittel siehe Mit MySQL verbinden und den umfassenderen PHP MySQL-Datenbankguide.