Guida Completa alla Funzione mysqli_thread_id in PHP
Scopri come usare mysqli_thread_id() in PHP per ottenere l'ID del thread MySQL, monitorare connessioni e gestire query con esempi pratici.
Quando si lavora con i database MySQL in PHP, l'estensione mysqli espone molte funzioni per gestire connessioni e query. Una di queste è mysqli_thread_id(), che restituisce il thread ID — un numero che il server MySQL assegna alla tua connessione per tutta la sua durata.
Questa guida spiega cos'è il thread ID, quando è effettivamente utile, come chiamare correttamente la funzione (sia nello stile procedurale che orientato agli oggetti) e le insidie da evitare.
Cos'è la funzione mysqli_thread_id?
mysqli_thread_id() restituisce l'identificatore univoco di connessione (thread) che il server MySQL ha assegnato alla connessione corrente. Lo stesso numero è ciò che SELECT CONNECTION_ID() riporta, ed è il valore che si passa a un'istruzione KILL per terminare una connessione bloccata.
mysqli_thread_id(mysqli $mysql): int- Parametro —
$mysql: un oggetto connessione restituito damysqli_connect()(o un'istanzanew mysqli(...)). - Valore restituito — un
int: il thread ID per la connessione.
L'ID è valido solo per la durata di quella connessione. Non appena la connessione si chiude (o si interrompe e si riconnette), MySQL assegna un nuovo thread ID — quindi non memorizzarlo mai tra richieste diverse e non assumere che sia stabile.
La chiamata procedurale
mysqli_thread_id($connection)e lo stile a oggetti$connection->thread_idsono equivalenti.
Quando si usa?
Il thread ID è uno strumento diagnostico e amministrativo, non qualcosa di cui la maggior parte del codice CRUD ha bisogno. Utilizzalo quando vuoi:
- Terminare una connessione bloccata. Cattura l'ID, poi da un'altra sessione esegui
KILL <id>per interrompere una query a lunga esecuzione. - Tracciare una connessione nel log delle query lente o in
SHOW PROCESSLIST, dove ogni riga è identificata da questo stesso ID. - Eseguire il debug del connection pooling / delle connessioni persistenti, dove aiuta a confermare se si sta riutilizzando una connessione o se ne sta aprendo una nuova.
Come usare mysqli_thread_id
1. Aprire una connessione
mysqli_thread_id() richiede una connessione attiva, quindi connettiti prima:
<?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. Leggere il thread ID
Con una connessione valida a disposizione, chiama la funzione e utilizza il valore:
<?php
$threadId = mysqli_thread_id($connection);
echo "Thread ID: " . $threadId; // e.g. Thread ID: 42L'equivalente orientato agli oggetti legge la proprietà invece di chiamare una funzione:
<?php
$mysqli = new mysqli($host, $user, $password, $database);
$threadId = $mysqli->thread_id;
echo "Thread ID: " . $threadId;3. Usare l'ID per terminare la connessione (opzionale)
Un caso d'uso comune nel mondo reale è catturare l'ID affinché una diversa sessione possa terminare questa se si blocca:
<?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);Insidie comuni
- Non memorizzare l'ID nella cache. Cambia ogni volta che la connessione viene ristabilita, quindi salvarlo in una sessione o in un database è inutile dopo una riconnessione.
- Passa una connessione valida. Chiamare la funzione con una connessione fallita o già chiusa genera un avviso/errore — controlla sempre il risultato di
mysqli_connect()prima, come mostrato sopra. - Identifica la connessione, non la richiesta PHP. Due script che condividono una connessione persistente possono riportare lo stesso thread ID; due richieste su connessioni separate avranno valori diversi.
Conclusione
mysqli_thread_id() fornisce l'identificatore del server MySQL per la connessione corrente — lo stesso valore usato da CONNECTION_ID(), SHOW PROCESSLIST e KILL. È uno strumento piccolo ma utile per monitorare, eseguire il debug e gestire le connessioni. Ricorda che l'ID vive e muore con la connessione, quindi leggilo quando ne hai bisogno invece di memorizzarlo nella cache.
Per funzioni di connessione correlate, consulta Connessione a MySQL e la guida completa PHP MySQL Database.