Sante Caserio
pubblicato più di 2 anni fa

La riconnessione automatica

Una ricetta che torna utile nella scrittura di programmi che si connetto a server MySQL

Quando si scrive un programma che si connette a un server MySQL, è possibile utilizzare una comoda funzionalità chiamata riconnessione automatica. Essa fa sì che, se la connessione al server si interrompe, il client si riconnetta automaticamente.
E’ però importante capire che si creerà una nuova connessione a tutti gli effetti. Di conseguenza le eventuali tabelle temporanee, le transazioni in corso, i lock, i prepared statements definiti, le variabili di sessione, etc, andranno perduti. Tuttavia la riconnessione automatica permetterà a una nuova query di essere eseguita senza generare errori e senza che noi dobbiamo scrivere una funzione che si occupi di ristabilire una nuova connessione.

Impostare la riconnessione automatica

Questa funzionalità è stata disabilitata per default nelle più recenti versioni di MySQL, mentre era abilitata nelle più vecchie. PHP non permette di modificare questa opzione, tuttavia altre API per diversi linguaggi lo consentono. Per farlo è sufficiente impostare a 1 il bit relativo nella bitmask che contiene le opzioni di connessione. Vediamo come fare in C:

1my_bool reconnect = 1;
2mysql_options(&mysql, MYSQL_OPT_RECONNECT, &reconnect);

Utilizzare il ping

PHP fornisce la funzione mysql_ping(); essa verifica se la connessione corrente è ancora attiva e, qualora non lo sia, tenta una riconnessione automatica. Se non vi riesce, restituisce false. Se vi riesce o se la connessione non è mai caduta, restituisce true. Poiché, come spiegato all’inizio dell’articolo, la riconnessione comporta comunque alcune conseguenze, il programma potrebbe aver bisogno di sapere se la vecchia connessione è andata perduta. Ciò può essere fatto controllando l’id del thread relativo, tramite la funzione mysql_thread_id(). Ecco come fare, in PHP:

 1$con = mysql_connect('...', '', '...');
 2$id = mysql_thread_id();
 3# fai finta che qui ci sia del codice
 4if (!mysql_ping()) {
 5    exit('The connection is dead');
 6} else {
 7    if ($id != mysql_thread_id())
 8        # una nuova connessione
 9        # è stata creata
10}

Opzioni che influenzano la riconnessione

L’API di PHP mysqli fornisce alcune opzioni di connessione che influenzano la riconnessione automatica:

MYSQLI_OPT_CONNECTION_TIMEOUT
Per quanti secondi una connessione può rimanere inattiva prima di essere chiusa.

MYSQLI_INIT_COMMAND
Un comando SQL che viene eseguito automaticamente ad ogni connessione.

Per utilizzare queste opzioni è necessario inizializzare un oggetto connessione con mysqli_init():

1$con = mysqli_init();
2$con->mysqli_options(MYSQLI_OPT_CONNECTION_TIMEOUT, 5);
3$con->mysqli_real_connect(...);

Condividi su:

Esprimi un voto:

  • Current rating: 0.0/5
  • 1
  • 2
  • 3
  • 4
  • 5

Argomenti chiave:

Ultimi commenti Ultimi commenti

Esegui il Login oppure registrati per scrivere un commento.
Cerca nel sito...
Ultime recipes

Un utilissimo tool di shell che effettua un dettagliato e comodo report su MySQL MySQL Report un tool di shell per tenere tutto sotto controllo

Un utilissimo tool di shell che effettua un dettagliato e comodo report su MySQL


Vai alla recipe

Un utilissimo tool per sniffare il traffico Client/Server TCP/IP di MySQL MySQLSniffer sniffare il traffico TCP di MySQL

Un utilissimo tool per sniffare il traffico Client/Server TCP/IP di MySQL


Vai alla recipe

Verificare l'integrità, riparare gestire chiavi e memoria di tabelle MyISAM attraverso myisamchk riparare file MyISAM

Verificare l'integrità, riparare gestire chiavi e memoria di tabelle MyISAM attraverso il file myisamchk


Vai alla recipe

Un tool per comprimere le tabelle MyISAM fino a oltre il 50% myisampack comprimere file MyISAM

Un tool per comprimere le tabelle MyISAM fino a oltre il 50%


Vai alla recipe

mysqlshow le info di base sui database, tabelle e colonne senza utilizzare alcun mysqlshow visualizzare le informazioni sul database MySQL

mysqlshow le info di base sui database, tabelle e colonne senza utilizzare alcun client


Vai alla recipe

Utilizzando UNION / UNION ALL su campi int unsigned zerofill,
ho notato che MysqlUNION / UNION ALL su campi int unsigned zerofill. di DebUsr
Vai al tip

Utilizzo di funzioni come alias di campo tramite l'impiego di prepared statementReport con alias di campo dinamici di john_revelator
Vai al tip

Può capitare che sia necessario eseguire un dump di database in formato Comma SeparatedEsecuzione dump in formato CSV (tabelle in engine MyIsam esportate in formato CSV) di ghigomatto
Vai al tip

E' possibile eseguire le query SQL contenute in un file di testo. Questo è utileEseguire le query da un file di testo di Sante Caserio
Vai al tip

Se vogliamo fare il backup di tutti i database con mysqldump, e ne abbiamo parecchiFare il backup di tutti i database di Sante Caserio
Vai al tip

Salve,vorrei chiedervi un aiutino per una query che mi infastidisce un pò.
Ho 4 aiuto per una query! di fighterdorico Vai al topic

Salve,vorrei chiedervi un aiutino per una query che mi infastidisce un pò.
Ho 4 aiuto per una query! di fighterdorico Vai al topic

Salve,vorrei chiedervi un aiutino per una query che mi infastidisce un pò.
Ho 4 aiuto per una query! di fighterdorico Vai al topic

Salve a tutti.

Ho una tabella con lettere accentate.
Le lettere vengono visualizzate ordinamento tabelle di ditch Vai al topic

Salve a tutti.

Ho una tabella con lettere accentate.
Le lettere vengono visualizzate ordinamento tabelle di ditch Vai al topic