Il controllo degli errori con PHP, un esempio applicativo

Nell’articolo introduttivo alla classe mysqli (link), per semplicità di trattazione non si è preso in considerazione il problema del controllo degli errori che possono verificarsi nel corso dell’esecuzione degli script PHP e che possono determinare la comparsa nella pagina di messaggi di errore incomprensibili all’utente, come quelli mostrati nella figura seguente.

php-errori

Gli errori della figura precedente sono stati determinati dall’esecuzione del seguente script di esempio.

Nello script precedente volutamente è stato introdotto un errore: il nome corretto dell’host del server MySQL con cui stabilire la connessione doveva essere ‘localhost‘ e non ‘localhoste‘! A causa di questo errore la connessione con il server MySQL non viene stabilita e ciò determina una serie di errori a catena. Una situazione analoga a questa può aversi se, nonostante la correttezza dello script, per qualche ragione il server non è disponibile.

Le funzioni exit() e die()

In generale in uno script PHP gli errori che possono scaturire dall’esecuzione di un’istruzione che interagisce con il server, possono determinare una situazione non recuperabile che può compromettere la corretta esecuzione delle istruzioni successive. Pertanto, per tali istruzioni è necessario verificare la loro corretta esecuzione e definire, in caso contrario, un comportamento alternativo che, nella maggior parte dei casi, consiste nella terminazione dello script PHP e nella visualizzazione di un messaggio opportuno. A tale scopo si utilizzano le funzioni exit() o die(), così come mostrato di seguito:

Nel codice precedente, dopo l’istruzione che tenta di stabilire una connessione al server MySQL, con la if() si controlla se essa abbia determinato un errore, nel qual caso lo script viene interrotto richiamando la funzione die() e nella pagina viene visualizzato il messaggio di errore passato come stringa alla funzione. Come condizione di controllo della struttura if() è stato utilizzato l’attributo connect_error dell’oggetto di classe mysqli, che: nel caso di errore, è una stringa con la descrizione dell’errore (che viene interpretata dalla if() come true), nel caso contrario una stringa vuota (che viene interpretata dalla if() come false).

L’operatore ‘@’ di controllo degli errori

Nel codice precedente è stato utilizzato anche l’operatore ‘@’, detto operatore di controllo degli errori del linguaggio PHP. Questo operatore può essere anteposto all’istruzione che si sta controllando, per impedire la visualizzazione del messaggio di warning dell’errore da essa generato. La figura seguente mostra il risultato dell’esecuzione dello script precedente con la modifica proposta.

php-errori2

Ovviamente il controllo dell’errore che è stato realizzato sull’istruzione che stabilisce la connessione con il server, andrebbe fatto anche sulle altre istruzioni che fanno interagire lo script PHP con il server, così come viene mostrato di seguito.

Nello script precedente rispetto a quanto già detto sopra, l’unica novità è l’aver utilizzato l’attributo errno dell’oggetto di classe msqli che contiene il numero dell’errore: esso è diverso da zero e, quindi, è interpretato dalla if come true, nel caso sia stato generato un errore, oppure in caso contrario vale zero e quindi è interpretato dalla if come false. Nella figura seguente viene mostrato ciò che lo script PHP visualizza nella pagina nel caso non si verifichi alcun errore.

php-errori3