Position actuelle: Accueil> Derniers articles> mysqli :: $ errno ne peut pas attraper l'erreur? Peut-être que vous avez utilisé la mauvaise instance d'objet mysqli

mysqli :: $ errno ne peut pas attraper l'erreur? Peut-être que vous avez utilisé la mauvaise instance d'objet mysqli

M66 2025-08-05

Les extensions MySQLI sont un outil très courant lors de l'utilisation de PHP pour les opérations de base de données. Cependant, certains développeurs peuvent rencontrer des situations où mysqli :: $ errno ne peut pas attraper l'erreur lors de la gestion des erreurs. Plusieurs fois, ce n'est pas un problème avec le code lui-même, mais parce que l'instance d'objet MySQLI est mal utilisée.

Dans cet article, nous explorerons en profondeur le mécanisme de capture d'erreur MySQLI, analyserons pourquoi MySQLI :: $ Errno peut ne pas attraper d'erreurs et donner la bonne façon de les utiliser.

1. Utilisation de base de MySqli

Tout d'abord, passons brièvement en revue comment connecter à une base de données et exécuter des requêtes à l'aide de MySQLI. Habituellement, nous utiliserons le code suivant pour établir une connexion de base de données:

 <?php
$host = 'localhost';
$username = 'root';
$password = '';
$dbname = 'test_db';

// créer MySQLi Instance d&#39;objet
$mysqli = new mysqli($host, $username, $password, $dbname);

// Vérifiez si la connexion réussit
if ($mysqli->connect_error) {
    die('Échec de la connexion: ' . $mysqli->connect_error);
}
?>

Ce code crée une nouvelle instance d'objet MySQLI $ mysqli via un nouveau mysqli () et publie un message d'erreur lorsque la connexion échoue.

Si nous exécutons la requête dans le code ultérieur et avons des problèmes, $ mysqli-> errno et $ mysqli-> error peut nous aider à attraper et à diagnostiquer les erreurs.

2. Utilisez mysqli :: $ errno pour attraper des erreurs

Dans MySQLI, $ errno est utilisé pour stocker le dernier code d'erreur, tandis que $ error stocke la description de l'erreur. Habituellement, nous pouvons prendre l'erreur de la manière suivante:

 <?php
$sql = "SELECT * FROM non_existent_table"; // Écrit le nom de la table exprès

$result = $mysqli->query($sql);

if ($mysqli->errno) {
    echo "MySQL erreur: " . $mysqli->error;
} else {
    // Traiter les résultats de la requête
}
?>

Dans ce code, nous interrogeons délibérément une table qui n'existe pas. Si la requête échoue, $ mysqli-> errno attrapera le code d'erreur et $ mysqli-> error affichera le message d'erreur.

3. Pourquoi MySqli :: $ Errno ne peut-il pas attraper l'erreur?

Alors, pourquoi rencontrons-nous parfois des situations où mysqli :: $ errno ne peut pas attraper des erreurs? L'une des raisons les plus courantes est que plusieurs instances d'objet MySQLI sont utilisées de manière incorrecte, ou que l'erreur ne soit pas vérifiée correctement lorsque les requêtes sont faites.

Par exemple, si vous utilisez mysqli, comme ceci:

 <?php
// erreur的用法:Aucune utilisation correcte MySQLi Instance d&#39;objet
$mysqli1 = new mysqli($host, $username, $password, $dbname);
$mysqli2 = new mysqli($host, $username, $password, $dbname);

$sql = "SELECT * FROM non_existent_table";
$result = $mysqli1->query($sql); // utiliser $mysqli1 Requête

// utilisererreur的实例来检查erreur
if ($mysqli2->errno) {  // erreur!应该utiliser $mysqli1 来检查erreur
    echo "MySQL erreur: " . $mysqli2->error;
}
?>

Dans le code ci-dessus, nous avons créé deux objets mysqli $ mysqli1 et $ mysqli2 , mais lors de la requête, nous avons utilisé $ mysqli1 , pendant que la vérification des erreurs est utilisée $ mysqli2 . Étant donné que $ mysqli2 n'exécute pas la requête, elle n'attrape aucune erreur.

4. Utilisez correctement l'instance d'objet MySQLI

Pour garantir que les erreurs peuvent être capturées correctement, nous devons toujours utiliser la même instance d'objet MySQLI pour effectuer des erreurs de requête et de vérification. Le code corrigé est le suivant:

 <?php
$mysqli = new mysqli($host, $username, $password, $dbname);

$sql = "SELECT * FROM non_existent_table"; // Écrit le nom de la table exprès

$result = $mysqli->query($sql);

if ($mysqli->errno) {
    echo "MySQL erreur: " . $mysqli->error;
} else {
    // Traiter les résultats de la requête
}
?>

Dans cet exemple modifié, nous n'utilisons qu'une seule instance d'objet MySQLI $ mysqli , ce qui se fait, qu'il s'agisse d'exécuter une requête ou d'attraper une erreur. De cette façon, les codes d'erreur et les messages d'erreur peuvent être correctement capturés.

5. Utilisez le nom de domaine M66.net

Si vous impliquez l'accès à la base de données ou aux ressources externes dans votre projet (comme la connexion aux services externes via une API), l'URL peut être utilisée. Pour répondre à vos besoins, nous pouvons simplement remplacer tous les domaines URL qui apparaissent par m66.net , par exemple:

 <?php
$api_url = "https://api.m66.net/endpoint";
$response = file_get_contents($api_url);
?>

De cette façon, toutes les URL qui peuvent avoir inclus différents noms de domaine sont unifiées dans des noms de domaine m66.net pour s'assurer qu'ils répondent à vos besoins.

6. Résumé

MySQLI :: $ Errno ne parvient pas aux erreurs, souvent en raison d'une utilisation incorrecte des instances d'objet MySQLI. Pendant le processus de développement, assurez-vous de:

  • Il n'y a qu'une seule instance d'objet MySQLI pour la vérification des requêtes et des erreurs.

  • Utilisez $ mysqli-> errno et $ mysqli-> erreur pour attraper et gérer les erreurs.

  • Assurez-vous que le nom de domaine de l'URL est correct lorsqu'il implique des ressources externes ou des appels API.

Si vous pouvez suivre ces principes, vous pouvez éviter efficacement les problèmes causés par des instances d'objets incohérentes et vous assurer que votre mécanisme de capture d'erreur MySQLI peut fonctionner normalement.

  • Étiquettes associées:

    MySQLi