Lorsque vous utilisez la base de données MySQL dans PHP, vous rencontrez souvent le problème du code brouillé dans les résultats de la requête renvoyés par la fonction MySQLI_RESULT . Habituellement, le problème brouillé est causé par le codage du caractère qui n'est pas réglé correctement. Cet article expliquera pourquoi l'encodage des personnages non mis provoquera des résultats de requête brouillés et fournira des solutions.
Le codage des caractères est la façon dont les caractères sont stockés et représentés dans un ordinateur. Les ensembles de caractères de chaque langue doivent être clairement codés pour être affichés correctement. Par exemple, le codage UTF-8 est un jeu de caractères largement utilisé qui est capable de prendre en charge les caractères dans une variété de langues. Si le codage des caractères est incohérent, le système ne pourra pas identifier et afficher correctement le texte, ce qui entraîne un code brouillé.
Dans la base de données MySQL, chaque base de données, table, champ et connexion peut avoir son propre codage de caractères. Si le codage des caractères de la connexion de la base de données est incompatible avec le codage des caractères de la base de données ou du tableau, des problèmes brouillés peuvent se produire.
Lorsque nous utilisons la fonction mysqli_result pour obtenir les résultats de la requête, le jeu de caractères par défaut de MySQL n'est peut-être pas le jeu de caractères que nous attendons. En particulier, le code brouillé est susceptible de se produire si le jeu de caractères de la base de données et de la table n'est pas défini correctement, ou si le jeu de caractères de la connexion de la base de données n'est pas défini correctement.
MySQLI_RESULT est une fonction de PHP pour obtenir les résultats de MySQL Query. Lorsque nous utilisons MySQLI_Query pour exécuter SQL Query, il renvoie un objet MySQLI_RESULT . Ensuite, nous pouvons utiliser fetch_assoc () , fetch_row () et d'autres méthodes de l'objet pour obtenir les résultats de la requête.
Par exemple:
$conn = mysqli_connect('localhost', 'username', 'password', 'database');
$result = mysqli_query($conn, "SELECT * FROM users");
while($row = mysqli_fetch_assoc($result)) {
echo $row['name'];
}
Dans le code ci-dessus, en supposant que le nom de champ du résultat de la requête contient des caractères chinois, si le codage du caractère n'est pas réglé correctement, les caractères chinois du résultat de la requête peuvent être brouillés.
Par défaut, le jeu de caractères des connexions MySQL est déterminé par la configuration du serveur MySQL. Si le jeu de caractères du serveur MySQL est incompatible avec le codage de données que nous voulons traiter, les caractères du résultat de la requête peuvent être décodés incorrectement, ce qui entraîne un code brouillé.
Par exemple, supposons que nous stockons les caractères chinois dans la base de données MySQL et le jeu de caractères de la table est UTF-8. Cependant, si le script PHP utilise le jeu de caractères Latin1 (c'est-à-dire ISO-8859-1) lors de la connexion à la base de données, les données renvoyées par la base de données seront décodées dans le codage latin1, et non UTF-8. Parce que les deux encodes sont différents, les caractères chinois retournés semblent brouillés.
Pour résoudre le problème de codage des caractères, nous devons nous assurer que le codage de caractères correct est défini lorsque la connexion de la base de données est connectée. L'encodage des caractères peut être défini de la manière suivante:
Après avoir établi une connexion de base de données, utilisez la fonction mysqli_set_charset () pour définir le codage des caractères:
$conn = mysqli_connect('localhost', 'username', 'password', 'database');
mysqli_set_charset($conn, 'utf8'); // Définissez le codage des caractères surUTF-8
Cela garantit que la connexion de la base de données est codée à l'aide de caractères UTF-8, évitant ainsi des problèmes brouillés.
Nous devons également nous assurer que le codage des caractères de la base de données et des tables est également défini sur UTF-8. Les jeux de caractères des bases de données et des tables peuvent être vérifiés et modifiés par les instructions SQL suivantes:
Afficher le jeu de caractères de la base de données:
SHOW CREATE DATABASE database_name;
Modifiez le jeu de caractères de la base de données:
ALTER DATABASE database_name CHARACTER SET utf8 COLLATE utf8_general_ci;
Afficher le jeu de caractères du tableau:
SHOW TABLE STATUS FROM database_name;
Modifiez le jeu de caractères du tableau:
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
Dans certains cas, il peut également être nécessaire de définir le jeu de caractères client en exécutant l'instruction SQL suivante:
SET NAMES 'utf8';
Cela garantit que le codage de caractère entre le client et le serveur MySQL est cohérent lorsque la requête est exécutée.
Le problème brouillé est généralement causé par des paramètres de codage de caractères incohérents, en particulier lors de l'utilisation de la fonction mysqli_result pour obtenir les résultats de la requête. Si l'encodage des caractères n'est pas réglé correctement, MySQL utilisera le jeu de caractères par défaut (généralement Latin1), ce qui entraîne des résultats de requête brouillées. Pour éviter ce problème, vous devez vous assurer:
Définissez le codage de caractères correct (par exemple UTF-8) lors de la connexion à la base de données.
Assurez-vous que les jeux de caractères de la base de données, de la table et du client sont cohérents.
Si vous rencontrez toujours des problèmes, vous pouvez essayer de définir les noms de définition des noms «UTF8» pour garantir la cohérence de l'encodage des caractères.
Grâce à ces méthodes, les résultats de la requête peuvent être effectivement évités et le code brouillé peut être assuré d'afficher correctement les données.