W3docs

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): string

Parametro

  • $mysqli (obbligatorio) — Un object di connessione MySQLi restituito da mysqli_connect() (oppure mysqli_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 $mysqli utilizzato 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 restituisce false (o lancia un'eccezione, in modalità strict). Usa mysqli_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

Esercitazione

Pratica
Quali sono alcuni modi per gestire gli errori in PHP?
Quali sono alcuni modi per gestire gli errori in PHP?
Was this page helpful?