W3docs

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 von mysqli_connect() zurückgegeben wird (oder eine new 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_id sind 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: 42

Das 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.

Übungen

Übung
Was gibt mysqli_thread_id() zurück?
Was gibt mysqli_thread_id() zurück?
Was this page helpful?