Maison  >  Article  >  développement back-end  >  Comment résoudre le problème d'incompatibilité php

Comment résoudre le problème d'incompatibilité php

藏色散人
藏色散人original
2021-02-07 09:29:032937parcourir

Solution à l'incompatibilité PHP : 1. Modifiez "my.cnf" pour spécifier le jeu de caractères ; 2. Mettez à jour le jeu de caractères existant via "altérer l'utilisateur 'root'@'%' identifié avec..." Compte mot de passe ; 3. Réinstallez Mysql8.0.

Comment résoudre le problème d'incompatibilité php

L'environnement d'exploitation de cet article : système Windows 7, PHP version 7.1, ordinateur DELL G3.

Résumé des problèmes d'incompatibilité entre PHP et Mysql8

Après avoir installé Mysql8.0, nous devons travailler ensemble avec notre PHP d'origine. Cependant, il était capable de fonctionner à l'origine. avec Mysql5.1 Le code qui fonctionne bien ensemble signale soudainement une erreur et il semble qu'un travail supplémentaire soit nécessaire.

报错:PDO::__construct(): Server sent charset (255) unknown to the client. Please, report to the developers

Selon les informations en ligne, Mysql8.0 a modifié le jeu de caractères par défaut en utfmb4, donc la communication avec le client (pas seulement PHP) ne peut pas être reconnue. Nous devons modifier my.cnf pour spécifier les caractères. ensemble.

[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
collation-server = utf8_unicode_ci
character-set-server = utf8
报错:PDO::__construct(): The server requested authentication method unknown to the client [caching_sha2_password]

Selon les informations en ligne, cela est dû à l'incompatibilité de la méthode de cryptage pour l'authentification de l'identité de l'utilisateur. La méthode par défaut dans mysql8.0 est cache_sha2_password, ce qui provoque des problèmes de compatibilité avec les anciennes versions de la méthode de cryptage. l'ancienne version est mysql_native_password.

Recommandé : "Tutoriel vidéo PHP"

Nous pouvons spécifier la méthode de cryptage à définir :

# 新建用户,使用旧版加密方式设置密码
CREATE USER username@localhost identified with mysql_native_password by 'password';
# 更新已存在的账号密码加密方式
alter user 'root'@'%' identified with mysql_native_password by 'password';

Mais une meilleure façon est d'ajouter une ligne de la configuration par défaut :

[mysqld]
default_authentication_plugin = mysql_native_password
报错:Access denied for user 'root'@'localhost' (using password: YES)
mysql> GRANT ALL PRIVILEGES ON *.* TO 'oss'@'%';
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

Lorsque j'ai ajouté des autorisations à d'autres utilisateurs, j'ai reçu une erreur indiquant aucune autorisation. La raison était que j'ai accidentellement supprimé l'utilisateur root. Bien qu'il existe de nombreux documents sur Internet pour résoudre ce problème. , après avoir reconstruit Bien que l'utilisateur root ait Grant_priv: Y, il ne parvient toujours pas à attribuer des autorisations, ce qui me donne mal à la tête.

Solution : Réinstallez, référez-vous à l'article pour installer Mysql8.0.

Résumé

Quelles sont les nouveautés de mysql8.0 Je n'ai pas vérifié la documentation en détail, mais la compatibilité m'a donné du fil à retordre au début, mais ? heureusement, le problème a été résolu. Après ces trois questions, mon programme PHP s'est exécuté avec succès. Je vais maintenant mettre à niveau PHP5.1 vers PHP7.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn