W3docs

errno

Scopri la funzione PHP mysqli_errno() per ottenere il codice di errore numerico dell'ultima operazione MySQLi su una connessione.

Questo articolo tratta la funzione PHP mysqli_errno(), che restituisce il codice di errore numerico relativo alla chiamata più recente su una connessione MySQLi. Scoprirai cosa restituisce, come interpretare il codice, come si differenzia da mysqli_error() e come utilizzarla sia con lo stile procedurale che con quello orientato agli oggetti di MySQLi.

Cosa fa mysqli_errno()

mysqli_errno() è una funzione PHP integrata che restituisce il codice di errore dell'ultima funzione MySQLi eseguita su una determinata connessione. È la controparte programmatica di un messaggio leggibile dall'utente: mentre mysqli_error() fornisce una frase come "Table 'db.my_table' doesn't exist", mysqli_errno() restituisce il numero intero grezzo (in questo caso, 1146) su cui è possibile fare confronti nel codice.

Sintassi e valore restituito

mysqli_errno(mysqli $mysqli): int
  • Parametro$mysqli: una connessione restituita da mysqli_connect() (procedurale) o new mysqli(...) (orientato agli oggetti).
  • Valore restituito — il codice di errore dell'ultima chiamata su quella connessione, oppure 0 se non si è verificato alcun errore. Controlla sempre il valore restituito invece di presumere la presenza di un errore.

Perché un numero? I codici numerici sono stabili e facili da usare nelle diramazioni. Il testo di un messaggio di errore può cambiare tra versioni di MySQL o in base alla localizzazione, ma il codice (ad es. 1062 per una chiave duplicata) rimane invariato — quindi sono i codici che dovresti usare nella logica if/switch.

Utilizzo di mysqli_errno() (stile procedurale)

Richiede una connessione MySQLi valida come unico argomento. Ecco uno schema tipico:

Come usare la funzione mysqli_errno()?

<?php
$mysqli = mysqli_connect("localhost", "username", "password", "database");

if (!$mysqli) {
    die("Connection failed: " . mysqli_connect_error());
}

$query = "SELECT * FROM my_table";
$result = mysqli_query($mysqli, $query);

if (!$result) {
    $error_code = mysqli_errno($mysqli);
    echo "Failed to execute query. Error code: " . $error_code;
    exit();
}

mysqli_close($mysqli);
?>

Qui verifichiamo prima che la connessione sia riuscita, poi eseguiamo una query con mysqli_query(). Se la query fallisce (!$result), mysqli_errno($mysqli) ci fornisce il codice numerico in modo da poterlo registrare ed uscire.

Abbinare errno a mysqli_error()

In pratica vuoi quasi sempre sia il codice (su cui fare diramazioni) che il messaggio (da registrare o visualizzare). Usa mysqli_errno() insieme a mysqli_error():

<?php
$mysqli = mysqli_connect("localhost", "username", "password", "database");

$result = mysqli_query($mysqli, "SELECT * FROM missing_table");

if (!$result) {
    $code    = mysqli_errno($mysqli);   // e.g. 1146
    $message = mysqli_error($mysqli);   // e.g. "Table 'database.missing_table' doesn't exist"

    // Branch on the stable numeric code, not the message text.
    if ($code === 1146) {
        echo "The table is missing. ";
    }
    echo "[$code] $message";
}

mysqli_close($mysqli);
?>

Stile orientato agli oggetti

Se crei la connessione con new mysqli(...), usa $mysqli->errno come proprietà (e $mysqli->error per il messaggio) invece della funzione procedurale:

<?php
$mysqli = new mysqli("localhost", "username", "password", "database");

if (!$mysqli->query("SELECT * FROM missing_table")) {
    echo "Error " . $mysqli->errno . ": " . $mysqli->error;
}

$mysqli->close();
?>

Entrambi gli stili riportano lo stesso codice — scegli quello coerente con il resto del tuo codebase. Consulta PHP MySQLi per una panoramica dell'estensione.

Codici di errore MySQL comuni

Alcuni codici che incontrerai spesso nella gestione degli errori MySQLi:

CodiceSignificato
1045Accesso negato per l'utente (username/password errati)
1049Database sconosciuto
1062Voce duplicata per una chiave univoca/primaria
1146La tabella non esiste
1264Valore fuori intervallo per una colonna
1452Violazione del vincolo di chiave esterna

Per l'elenco completo, consulta il riferimento ufficiale agli errori del server MySQL.

Utilizzo avanzato

La funzione mysqli_errno() può essere utilizzata anche in scenari più avanzati. Quando si lavora con più connessioni, è necessario passare l'oggetto MySQLi specifico alla funzione per recuperare il codice di errore relativo a quella particolare connessione. Ecco un esempio:

Utilizzo avanzato di PHP mysqli_errno()

<?php
$mysqli1 = mysqli_connect("localhost", "username", "password", "database1");
$mysqli2 = mysqli_connect("localhost", "username", "password", "database2");

if (!$mysqli1 || !$mysqli2) {
    die("One or more connections failed.");
}

$query = "SELECT * FROM my_table";
$result1 = mysqli_query($mysqli1, $query);
$result2 = mysqli_query($mysqli2, $query);

if (!$result1) {
    $error_code = mysqli_errno($mysqli1);
    echo "Failed to execute query on connection 1. Error code: " . $error_code;
    exit();
}

if (!$result2) {
    $error_code = mysqli_errno($mysqli2);
    echo "Failed to execute query on connection 2. Error code: " . $error_code;
    exit();
}

mysqli_close($mysqli1);
mysqli_close($mysqli2);
?>

In questo esempio creiamo due oggetti MySQLi e ci connettiamo a due database MySQL diversi. Eseguiamo quindi la stessa query utilizzando ciascuna connessione e memorizziamo il risultato in una variabile. Verifichiamo se si è verificato un errore in ogni query usando la condizione !$result. In caso di errore, chiamiamo mysqli_errno() per l'oggetto MySQLi pertinente per ottenere il codice di errore associato a quella connessione specifica. Quindi visualizziamo il codice di errore e usciamo dallo script.

Nota: mysqli_errno() riporta l'errore per una connessione specifica. Con più connessioni aperte, il codice è circoscritto all'oggetto connessione che si passa — quindi passa sempre quello corretto.

Funzioni correlate

  • mysqli_connect_errno() — codice di errore per un tentativo di connessione fallito (quando il collegamento stesso non è stato possibile stabilire).
  • mysqli_connect_error() — il messaggio per un tentativo di connessione fallito.
  • error_get_last() — l'ultimo errore PHP (non specifico di MySQLi).

Conclusione

mysqli_errno() restituisce il codice di errore numerico relativo all'operazione più recente su una connessione MySQLi, oppure 0 in assenza di errori. Abbinala a mysqli_error() per il messaggio, opera diramazioni sul codice numerico stabile e passa l'oggetto connessione corretto quando sono aperte più connessioni — questa è la base di una gestione robusta degli errori MySQLi.

Pratica

Pratica
Cosa restituisce la funzione PHP mysqli_errno()?
Cosa restituisce la funzione PHP mysqli_errno()?
Was this page helpful?