W3docs

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 par mysqli_connect() (procédural) ou new mysqli(...) (orienté objet).
  • Valeur de retour — le code d'erreur du dernier appel sur cette connexion, ou 0 si 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 1062 pour une clé dupliquée) reste le même — c'est donc sur les codes que vous devez vous baser dans votre logique if/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 :

CodeSignification
1045Accès refusé pour l'utilisateur (nom d'utilisateur/mot de passe incorrect)
1049Base de données inconnue
1062Entrée dupliquée pour une clé unique/primaire
1146La table n'existe pas
1264Valeur 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

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.

Pratique

Pratique
Que retourne la fonction PHP mysqli_errno() ?
Que retourne la fonction PHP mysqli_errno() ?
Was this page helpful?