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 damysqli_connect()(procedurale) onew mysqli(...)(orientato agli oggetti). - Valore restituito — il codice di errore dell'ultima chiamata su quella connessione, oppure
0se 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.
1062per una chiave duplicata) rimane invariato — quindi sono i codici che dovresti usare nella logicaif/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:
| Codice | Significato |
|---|---|
1045 | Accesso negato per l'utente (username/password errati) |
1049 | Database sconosciuto |
1062 | Voce duplicata per una chiave univoca/primaria |
1146 | La tabella non esiste |
1264 | Valore fuori intervallo per una colonna |
1452 | Violazione 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.