Position actuelle: Accueil> Derniers articles> Débogage de la procédure stockée Échec de l'appel à l'aide de MySQLI_STMT :: $ Erreur

Débogage de la procédure stockée Échec de l'appel à l'aide de MySQLI_STMT :: $ Erreur

gitbox 2025-05-20

Lorsque vous interagissez avec une base de données à l'aide de l'extension MySQLI de PHP, il n'est pas rare d'appeler les procédures stockées. Dans ce cas, les erreurs de débogage peuvent devenir relativement difficiles car les erreurs de procédure stockées de MySQL ne sont généralement pas renvoyées directement à l'endroit où PHP est appelé. Heureusement, la propriété d'erreur MySQLI_STMT :: $ de PHP peut nous aider à capturer les informations d'erreur des appels de procédure stockés, fournissant ainsi des indices pour le débogage. Cet article expliquera en détail comment utiliser cette propriété pour déboguer les défaillances des appels de procédure stockés.

arrière-plan

Dans PHP, l'erreur MySQLI_STMT :: $ est utilisée pour obtenir des informations d'erreur liées aux instructions de prétraitement. La propriété Erreur $ renvoie une chaîne décrivant toutes les erreurs qui se produisent lors de l'exécution de l'instruction. Si l'appel de procédure stocké échoue ou si la requête SQL échoue, nous pouvons utiliser cette propriété pour obtenir des informations d'erreur plus détaillées pour nous aider à localiser la cause profonde du problème.

Les procédures stockées de débogage ont échoué avec mysqli_stmt :: $ Erreur

Pour démontrer comment déboguer les appels de procédure stockés échouer avec MySQLI_STMT :: $ Erreur , nous devons d'abord nous assurer de nous connecter à la base de données et de configurer correctement la procédure stockée. Supposons que nous ayons une procédure stockée appelée get_user_info , qui prend un paramètre user_id et renvoie les informations de l'utilisateur. Voici un script PHP possible qui montre comment appeler cette procédure stockée et utiliser MySQLI_STMT :: $ Erreur pour obtenir des informations de débogage.

1. Établir une connexion de base de données

Tout d'abord, nous devons créer une connexion à la base de données et vérifier si elle réussit:

 <?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "test_database";

// Créer une connexion
$conn = new mysqli($servername, $username, $password, $dbname);

// Vérifiez la connexion
if ($conn->connect_error) {
    die("Échec de la connexion: " . $conn->connect_error);
}
?>

2. Appelez la procédure stockée et vérifiez les erreurs

Ensuite, nous sommes prêts à appeler la procédure stockée. Si l'appel échoue, nous utiliserons MySQLI_STMT :: $ Erreur pour obtenir les informations d'erreur détaillées:

 <?php
$user_id = 1;  // Supposons que l&#39;utilisateur que nous voulons interroger ID

// Préparer les appels de procédure stockés
$stmt = $conn->prepare("CALL get_user_info(?)");

if ($stmt === false) {
    die("La préparation de la procédure stockée a échoué: " . $conn->error);
}

// Lier les paramètres
$stmt->bind_param("i", $user_id);

// Exécuter les procédures stockées
$stmt->execute();

// Vérifiez si l&#39;exécution est réussie
if ($stmt->errno) {
    echo "La procédure stockée a échoué: " . $stmt->error;
} else {
    // Obtenir des résultats
    $result = $stmt->get_result();
    $user = $result->fetch_assoc();
    print_r($user);
}

// Déclaration étroite
$stmt->close();

// Fermer la connexion
$conn->close();
?>

3. Débogage d'erreur

Si l'appel de procédure stocké échoue, $ stmt-> errno et $ stmt-> L'erreur fournira des informations d'erreur détaillées. Par exemple, si le nom de procédure stocké est mauvais ou si les paramètres ne correspondent pas, $ stmt-> L'erreur renvoie un message d'erreur MySQL pour vous aider à localiser le problème.

Les erreurs courantes peuvent inclure:

  • La procédure stockée n'existe pas : si le nom de la procédure stocké est mal orthographié ou non créé, MySQLI_STMT :: $ Erreur affiche un message d'erreur de procédure inconnue .

  • Déliachance du type de paramètre : Si la procédure stockée attend un paramètre entier, mais que vous passez la chaîne, MySQLI_STMT :: $ L'erreur invitera que le type non décalé n'est pas.

4. Informations de débogage plus détaillées

Si des informations de débogage plus détaillées sont requises, vous pouvez utiliser l'état de procédure d'affichage de MySQL et afficher les commandes d'erreurs pour vérifier le journal d'état et d'erreur des procédures stockées:

 <?php
$result = $conn->query("SHOW PROCEDURE STATUS WHERE Name = 'get_user_info'");
if ($result->num_rows > 0) {
    while($row = $result->fetch_assoc()) {
        echo "État de la procédure stockée: " . $row["Db"] . " - " . $row["Name"] . "\n";
    }
} else {
    echo "Aucune information de procédure stockée trouvée。\n";
}
?>

Grâce à ces méthodes, vous pouvez obtenir plus d'informations sur les procédures stockées pour vous aider à localiser vos problèmes.

en conclusion

L'utilisation de MySQLI_STMT :: $ L'erreur peut simplifier considérablement le processus de débogage des erreurs lors des appels de procédure stockés. Il fournit aux développeurs des informations d'erreur détaillées, aidant à identifier rapidement les problèmes et à les résoudre. En combinant le journal des requêtes et des erreurs d'état de la base de données, vous pouvez résoudre le problème de l'échec de l'appel de procédure stocké plus efficacement.