errno
Découvrez la fonction PHP mysqli_errno() pour récupérer le code d'erreur numérique de la dernière opération MySQLi sur une connexion donnée.
Cet article présente la fonction PHP mysqli_errno(), qui retourne le code d'erreur numérique associé au dernier appel effectué sur une connexion MySQLi. Vous apprendrez ce qu'elle retourne, comment interpréter ce code, en quoi elle diffère de mysqli_error(), et comment l'utiliser avec les styles procédural et orienté objet de MySQLi.
Ce que fait mysqli_errno()
mysqli_errno() est une fonction PHP intégrée qui retourne le code d'erreur issu de la dernière fonction MySQLi exécutée sur une connexion donnée. C'est le pendant programmatique d'un message lisible par l'humain : là où mysqli_error() vous fournit une phrase comme "Table 'db.my_table' doesn't exist", mysqli_errno() vous donne l'entier brut (ici, 1146) que vous pouvez comparer dans votre code.
Syntaxe et valeur de retour
mysqli_errno(mysqli $mysqli): int- Paramètre —
$mysqli: une connexion retournée parmysqli_connect()(procédural) ounew mysqli(...)(orienté objet). - Valeur de retour — le code d'erreur du dernier appel sur cette connexion, ou
0si aucune erreur ne s'est produite. Vérifiez toujours la valeur de retour plutôt que de supposer qu'une erreur est présente.
Pourquoi un nombre ? Les codes numériques sont stables et faciles à tester par branchement. Le texte d'un message d'erreur peut changer entre les versions de MySQL ou selon les paramètres régionaux, mais le code (par exemple
1062pour une clé dupliquée) reste le même — c'est donc sur les codes que vous devez vous baser dans votre logiqueif/switch.
Utiliser mysqli_errno() (style procédural)
Elle nécessite une connexion MySQLi valide comme unique argument. Voici un schéma d'utilisation typique :
Comment utiliser la fonction 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);
?>Ici, nous vérifions d'abord que la connexion a réussi, puis nous exécutons une requête avec mysqli_query(). Si la requête échoue (!$result), mysqli_errno($mysqli) nous fournit le code numérique pour que nous puissions le journaliser et quitter.
Associer errno à mysqli_error()
En pratique, vous souhaitez presque toujours obtenir à la fois le code (pour le branchement) et le message (pour la journalisation ou l'affichage). Utilisez mysqli_errno() conjointement avec 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);
?>Style orienté objet
Si vous créez la connexion avec new mysqli(...), utilisez $mysqli->errno comme propriété (et $mysqli->error pour le message) au lieu de la fonction procédurale :
<?php
$mysqli = new mysqli("localhost", "username", "password", "database");
if (!$mysqli->query("SELECT * FROM missing_table")) {
echo "Error " . $mysqli->errno . ": " . $mysqli->error;
}
$mysqli->close();
?>Les deux styles rapportent le même code — choisissez celui qui correspond au reste de votre base de code. Consultez PHP MySQLi pour une vue d'ensemble de l'extension.
Codes d'erreur MySQL courants
Quelques codes que vous rencontrerez fréquemment lors de la gestion des erreurs MySQLi :
| Code | Signification |
|---|---|
1045 | Accès refusé pour l'utilisateur (nom d'utilisateur/mot de passe incorrect) |
1049 | Base de données inconnue |
1062 | Entrée dupliquée pour une clé unique/primaire |
1146 | La table n'existe pas |
1264 | Valeur hors plage pour une colonne |
1452 | Échec de la contrainte de clé étrangère |
Pour la liste complète, consultez la référence officielle des erreurs du serveur MySQL.
Utilisation avancée
La fonction mysqli_errno() peut également être utilisée dans des scénarios plus avancés. Lorsque vous travaillez avec plusieurs connexions, vous devez passer l'objet MySQLi spécifique à la fonction pour récupérer le code d'erreur de cette connexion particulière. Voici un exemple :
Utilisation avancée de 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);
?>Dans cet exemple, nous créons deux objets MySQLi et nous connectons à deux bases de données MySQL différentes. Nous exécutons ensuite la même requête avec chaque connexion et stockons le résultat dans une variable. Nous vérifions si une erreur s'est produite dans chaque requête grâce à la condition !$result. En cas d'erreur, nous appelons mysqli_errno() sur l'objet MySQLi concerné pour obtenir le code d'erreur associé à cette connexion spécifique. Nous affichons ensuite le code d'erreur et terminons le script.
Remarque :
mysqli_errno()rapporte l'erreur pour une connexion spécifique. Lorsque plusieurs connexions sont ouvertes, le code est limité à l'objet de connexion que vous passez — veillez donc toujours à passer le bon.
Fonctions associées
mysqli_connect_errno()— code d'erreur pour une tentative de connexion échouée (quand le lien lui-même n'a pas pu être établi).mysqli_connect_error()— le message pour une tentative de connexion échouée.error_get_last()— la dernière erreur PHP (non spécifique à MySQLi).
Conclusion
mysqli_errno() retourne le code d'erreur numérique de la dernière opération sur une connexion MySQLi, ou 0 en l'absence d'erreur. Associez-la à mysqli_error() pour le message, testez par branchement sur le code numérique stable, et passez le bon objet de connexion lorsque plusieurs sont ouverts — voilà le fondement d'une gestion robuste des erreurs MySQLi.