W3docs

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 da mysqli_connect() (o un'istanza new 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_id sono 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: 42

L'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.

Pratica

Pratica
Cosa restituisce mysqli_thread_id()?
Cosa restituisce mysqli_thread_id()?
Was this page helpful?