error
Scopri la funzione mysqli_error() in PHP per ottenere il messaggio di errore dell'ultima operazione MySQLi su una connessione.
In questo articolo ci concentreremo sulla funzione mysqli_error() in PHP, utilizzata per recuperare il messaggio di errore dell'ultima chiamata a una funzione MySQLi. Questa pagina illustra la sintassi, i parametri e il valore restituito dalla funzione, analizza esempi pratici e indica le funzioni correlate per la gestione degli errori.
Introduzione alla funzione mysqli_error()
La funzione mysqli_error() è una funzione PHP integrata che restituisce una string che descrive l'errore dell'operazione MySQLi più recente eseguita su una determinata connessione. Se l'ultima chiamata ha avuto successo — o non è ancora stata eseguita alcuna operazione — restituisce una string vuota ("").
È necessaria perché la maggior parte delle funzioni MySQLi (come mysqli_query()) segnala un errore restituendo semplicemente false. Questo indica che qualcosa è andato storto, ma non cosa. mysqli_error() colma questa lacuna fornendo il messaggio leggibile riportato dal server MySQL, ad esempio Table 'database.my_table' doesn't exist.
Sintassi
mysqli_error(mysqli $mysqli): stringParametro
$mysqli(obbligatorio) — Un object di connessione MySQLi restituito damysqli_connect()(oppuremysqli_init()+mysqli_real_connect()). L'errore riportato appartiene a questa specifica connessione.
Valore restituito
Una string con la descrizione dell'errore dell'ultima operazione su $mysqli. Una string vuota indica che non si è verificato alcun errore. Poiché una string vuota è considerata "falsy" in PHP, di solito si controlla il risultato della chiamata che ha fallito (ad esempio !$result) anziché mysqli_error() direttamente.
Stile object vs. procedurale. Questa pagina utilizza lo stile procedurale,
mysqli_error($mysqli). Con l'API orientata agli oggetti l'equivalente è la proprietà di sola lettura$mysqli->error.
Come utilizzare la funzione mysqli_error()
L'utilizzo della funzione mysqli_error() è semplice. La si chiama su un object di connessione MySQLi valido. Ecco un esempio:
Come utilizzare la funzione mysqli_error()?
<?php
$mysqli = mysqli_connect("localhost", "username", "password", "database");
$query = "SELECT * FROM my_table";
$result = mysqli_query($mysqli, $query);
if (!$result) {
$error_msg = mysqli_error($mysqli);
echo "Failed to execute query. Error message: " . $error_msg;
exit();
}
mysqli_close($mysqli);
?>In questo esempio, chiamiamo la funzione mysqli_connect() per connetterci a un database MySQL. Eseguiamo poi una query con la funzione mysqli_query() e memorizziamo il risultato in una variabile. Verifichiamo se si è verificato un errore nella query tramite la condizione !$result. In caso di errore, passiamo l'object di connessione a mysqli_error() per recuperare il messaggio di errore specifico, visualizzarlo e terminare lo script.
Nota: Verifica sempre che mysqli_connect() restituisca un object valido prima di eseguire le query. Se la connessione fallisce, mysqli_query() genererà un avviso PHP.
Utilizzo avanzato
La funzione mysqli_error() può essere utilizzata anche con connessioni multiple. Ecco un esempio:
Utilizzo avanzato di PHP mysqli_error()
<?php
$mysqli1 = mysqli_connect("localhost", "username", "password", "database1");
$mysqli2 = mysqli_connect("localhost", "username", "password", "database2");
$query = "SELECT * FROM my_table";
$result1 = mysqli_query($mysqli1, $query);
$result2 = mysqli_query($mysqli2, $query);
if (!$result1) {
$error_msg = mysqli_error($mysqli1);
echo "Failed to execute query on connection 1. Error message: " . $error_msg;
exit();
}
if (!$result2) {
$error_msg = mysqli_error($mysqli2);
echo "Failed to execute query on connection 2. Error message: " . $error_msg;
exit();
}
mysqli_close($mysqli1);
mysqli_close($mysqli2);
?>In questo esempio, stabiliamo due connessioni separate ed eseguiamo la stessa query su ciascuna. Verifichiamo il risultato per ogni connessione in modo indipendente. Se una query fallisce, passiamo l'object di connessione corrispondente a mysqli_error() per isolare e visualizzare l'errore specifico. Questo è importante perché mysqli_error() è legata alla connessione — chiamarla su $mysqli1 non riporta mai un errore avvenuto su $mysqli2.
Gestione moderna degli errori con le eccezioni
Per le applicazioni PHP più recenti, è preferibile abilitare la gestione degli errori basata sulle eccezioni anziché controllare mysqli_error() dopo ogni chiamata. Aggiungi questa riga prima di connetterti:
<?php
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
try {
$mysqli = mysqli_connect("localhost", "username", "password", "database");
$result = mysqli_query($mysqli, "SELECT * FROM my_table");
} catch (mysqli_sql_exception $e) {
echo "Database error: " . $e->getMessage();
}
?>Con MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT impostato, una connessione o una query fallita lancia automaticamente un object mysqli_sql_exception anziché restituire false. Lo stesso messaggio che avresti letto da mysqli_error() è disponibile tramite $e->getMessage(). A partire da PHP 8.1 questa modalità di segnalazione è quella predefinita, quindi il codice moderno si affida a try/catch piuttosto che ai controlli manuali.
Errori comuni
- Passare la connessione sbagliata.
mysqli_error()riporta gli errori per la connessione passata. Passa lo stesso$mysqliutilizzato per la query che ha fallito. - Chiamarla dopo
mysqli_close(). Una volta chiusa una connessione, l'object non è più valido e non è possibile leggerne l'errore. - Errori di connessione. Se
mysqli_connect()fallisce restituiscefalse(o lancia un'eccezione, in modalità strict). Usamysqli_connect_error()per gli errori durante la connessione —mysqli_error()è per gli errori successivi a una connessione riuscita.
Conclusione
In conclusione, la funzione mysqli_error() è uno strumento pratico per il debug e la gestione degli errori MySQLi. Verificando la validità della connessione e comprendendo come recuperare messaggi di errore specifici, è possibile costruire interazioni con il database più robuste.
Funzioni correlate
mysqli_query()— eseguire una query il cui fallimento si intende analizzare.mysqli_connect_error()— messaggio di errore da un tentativo di connessione fallito.mysqli_connect_errno()— codice di errore numerico per una connessione fallita.- PHP MySQLi overview — l'estensione MySQLi completa.
try/catche eccezioni — gestione degli errori basata sulle eccezioni.