Au cours du processus de développement, diverses erreurs se produisent souvent dans les interactions de la base de données et comment attraper et déboguer ces erreurs est l'une des techniques que les développeurs doivent maîtriser. Dans PHP, l'extension MySQLI fournit un moyen très pratique d'exécuter et de déboguer les requêtes de base de données. Parmi eux, l'erreur MySQLI_STMT :: $ est une propriété très utile qui peut nous aider à obtenir des informations d'erreur lors de l'exécution des instructions de prétraitement.
Cet article présentera comment utiliser MySQLI_STMT :: $ Erreur pour attraper et déboguer les erreurs dans les requêtes MySQLI, et vous aide à mieux comprendre comment les utiliser via des exemples de code réels.
MySQLI_STMT :: $ L'erreur est un attribut de la classe MySQLI_STMT dans MySQLI. Il renvoie le message d'erreur généré par l'exécution la plus récente de l'instruction de prétraitement ( mysqli_stmt ). Si aucune erreur ne se produit dans l'exécution, il renvoie une chaîne vide.
Dans les opérations de la base de données, la capture des messages d'erreur est très importante pour le débogage, en particulier lorsque des requêtes SQL complexes ou des problèmes de connexion. MySQLI_STMT :: $ L'erreur offre un moyen facile de prendre ces erreurs.
Établir une connexion de base de données
Tout d'abord, nous devons établir une connexion à la base de données via la classe MySQLI .
<?php
$host = 'localhost';
$username = 'root';
$password = '';
$database = 'test_db';
// Créer une connexion de base de données
$conn = new mysqli($host, $username, $password, $database);
// Vérifiez si la connexion réussit
if ($conn->connect_error) {
die("Échec de la connexion: " . $conn->connect_error);
}
?>
Préparer les instructions SQL
Ensuite, nous utilisons la fonction mysqli_prepare () pour préparer une instruction SQL et vérifier si l'instruction est préparée avec succès.
<?php
$sql = "INSERT INTO users (username, email) VALUES (?, ?)";
$stmt = $conn->prepare($sql);
if (!$stmt) {
die("SQL La préparation de la déclaration a échoué: " . $conn->error);
}
?>
Lier les paramètres
Dans MySQLI, nous pouvons lier les variables aux paramètres dans les requêtes SQL via la fonction bind_param () . Assurez-vous que le type de paramètre lié est cohérent avec le type attendu.
<?php
$username = 'john_doe';
$email = '[email protected]';
$stmt->bind_param("ss", $username, $email); // Le premier paramètre "ss" Paramètres représentant deux types de chaînes
?>
Exécuter une requête et assister à une erreur
Nous sommes maintenant prêts à exécuter l'instruction de prétraitement. Si l'exécution de la requête échoue, nous pouvons obtenir des informations d'erreur détaillées via l'erreur MySQLI_STMT :: $ .
<?php
if (!$stmt->execute()) {
echo "Échec de l'exécution de la requête: " . $stmt->error;
} else {
echo "Insertion de données avec succès!";
}
?>
MySQLI_STMT :: $ L'erreur est très utile lors du débogage, surtout lorsque les requêtes SQL ne sont pas comme prévu. Il peut vous aider à faire renvoyer le message d'erreur par la base de données MySQL. Par exemple, s'il y a une erreur de syntaxe, le tableau n'existe pas, ou si le type de données ne correspond pas, MySQLI_STMT :: $ Erreur fournira une description d'erreur détaillée.
Par exemple, supposons que nous exécutions une requête contenant la syntaxe d'erreur:
<?php
$sql = "INSERT INTO users (username, email) VALUE (?, ?)";
$stmt = $conn->prepare($sql);
if (!$stmt) {
die("SQL La préparation de la déclaration a échoué: " . $conn->error);
}
$stmt->bind_param("ss", $username, $email);
if (!$stmt->execute()) {
echo "Échec de l'exécution de la requête: " . $stmt->error; // Des informations d'erreur détaillées seront affichées ici
}
?>
Lors de l'échec de l'exécution, $ stmt-> L'erreur peut renvoyer un message d'erreur similaire à ce qui suit:
Échec de l'exécution de la requête: Unknown column 'VALUE' in 'field list'
Cela montre que nous utilisons la mauvaise syntaxe dans l'instruction SQL, et la syntaxe correcte doit être des valeurs au lieu de la valeur .
Erreur de syntaxe
Invites d'erreur: colonne inconnue , vous avez une erreur dans votre syntaxe SQL .
Solution: vérifiez si les noms de colonne, les noms de table et les mots clés de la requête SQL sont correctement orthographiés.
Défectionnement du type de données
Invites d'erreur: valeur entière incorrecte , données tronquées pour la colonne .
Solution: assurez-vous que le type de paramètre entrant est cohérent avec le type de colonne dans la table de base de données. Par exemple, lors du passage d'une chaîne à une colonne qui devrait être un entier, une erreur de décalage de type se produira.
Échec de la connexion
Invite d'erreur: MySQL Server a disparu .
Solution: vérifiez si la connexion de la base de données est toujours valide, surtout si elle n'est pas utilisée pendant longtemps.
En utilisant MySQLI_STMT :: $ ERROR, nous pouvons effectivement attraper et déboguer les erreurs dans les requêtes MySQLI. Il aide non seulement les développeurs à localiser rapidement les problèmes, mais aussi à améliorer la robustesse des capacités de code et de gestion des erreurs. Au cours du processus de développement, une bonne gestion des erreurs et des méthodes de débogage sont la clé pour améliorer l'efficacité. J'espère que cet article peut vous aider à mieux comprendre et utiliser MySQLI_STMT :: $ Erreur , vous rendant plus pratique lors du développement d'applications MySQLI.