Lorsque vous utilisez MySQLI pour les opérations de base de données, l'attribut d'erreur dans la classe MySQLI_STMT est un outil très important. Il est utilisé pour obtenir des informations d'erreur générées lors de l'exécution d'une requête. Cependant, de nombreux développeurs peuvent ignorer un détail lorsqu'il s'agit de cette propriété - le problème de codage.
Lorsque vous utilisez la classe MySQLI_STMT pour exécuter une requête, si la requête échoue, l'attribut d'erreur contiendra des informations d'erreur spécifiques. Vous pouvez obtenir une description d'erreur détaillée via MySQLI_STMT :: $ ERROR .
<?php
// Créer une connexion de base de données
$mysqli = new mysqli("localhost", "username", "password", "database_name");
if ($mysqli->connect_error) {
die("Échec de la connexion: " . $mysqli->connect_error);
}
// Préparez-vous à l'enquête
$stmt = $mysqli->prepare("SELECT * FROM users WHERE id = ?");
if ($stmt === false) {
echo "Préparez-vous à l'enquête失败: " . $mysqli->error;
exit();
}
// Lier les paramètres et exécuter la requête
$id = 1;
$stmt->bind_param("i", $id);
$stmt->execute();
// Obtenir un message d'erreur
if ($stmt->error) {
echo "La requête a échoué: " . $stmt->error;
}
$stmt->close();
$mysqli->close();
?>
Bien que MySQLI_STMT :: $ l'erreur renvoie des informations d'erreur détaillées, il peut y avoir des problèmes avec l'encodage. Dans certains cas, les caractères du message d'erreur peuvent apparaître brouillés, surtout si les paramètres du jeu de caractères de la base de données ou de la page sont incompatibles avec le jeu de caractères du serveur MySQL.
Pour gérer correctement les problèmes d'encodage pour les messages d'erreur, vous devez vous assurer que les opérations de connexion et de requête MySQL utilisent un jeu de caractères cohérent. Habituellement, nous pouvons l'ajuster de la manière suivante:
Lors de la connexion à MySQL, définissez le jeu de caractères:
$mysqli->set_charset("utf8mb4");
Cela garantira que la connexion à la base de données utilise le jeu de caractères UTF8MB4 , qui est capable de gérer correctement plusieurs langues et caractères spéciaux.
Avant d'exécuter la requête, définissez le jeu de caractères de la requête:
$mysqli->query("SET NAMES 'utf8mb4'");
Cela garantit que toutes les requêtes ultérieures utilisent le jeu de caractères correct, évitant ainsi des problèmes brouillés.
Si vous constatez que le message d'erreur renvoyé de MySQLI_STMT :: $ L'erreur contient du code brouillé, vous pouvez le résoudre en codant et en convertissant le message d'erreur. Voici un exemple de gestion du code brouillé:
<?php
// Obtenir un message d'erreur
$error_message = $stmt->error;
// Convertir le message d'erreur en UTF-8 codage
$error_message_utf8 = mb_convert_encoding($error_message, 'UTF-8', 'auto');
// Message d'erreur de sortie
echo "La requête a échoué: " . $error_message_utf8;
?>
Lorsque vous traitez avec l'erreur MySQLI_STMT :: $ , les problèmes de codage sont souvent ignorés, ce qui entraîne un affichage incorrect des messages d'erreur. Pour éviter ce problème, assurez-vous que les connexions et les requêtes de la base de données utilisent un jeu de caractères unifié et codent les conversions en cas de besoin. De cette façon, vous pouvez correctement obtenir et traiter les messages d'erreur MySQL, améliorer la robustesse de l'application et l'expérience utilisateur.