J'utilise php mysqli_connect
pour me connecter à une base de données MySQL (tous sur localhost)
<?php
//DEFINE ('DB_USER', 'user2');
//DEFINE ('DB_PASSWORD', 'pass2');
DEFINE ('DB_USER', 'user1');
DEFINE ('DB_PASSWORD', 'pass1');
DEFINE ('DB_Host', '127.0.0.1');
DEFINE ('DB_NAME', 'dbname');
$dbc = mysqli_connect(DB_Host, DB_USER, DB_PASSWORD, DB_NAME);
if(!$dbc){
die('error connecting to database');
}
?>
Fichier ini du serveur MySQL:
[mysqld]
# The default authentication plugin to be used when connecting to the server
default_authentication_plugin=caching_sha2_password
#default_authentication_plugin=mysql_native_password
avec caching_sha2_password
dans le fichier ini du serveur MySQL, il est impossible de se connecter avec user1 ou user2;
erreur: mysqli_connect (): La méthode d'authentification demandée par le serveur était inconnue du client [motdepasse_saching_sha2] dans ...
avec mysql_native_password
dans le fichier ini du serveur MySQL, il est possible de se connecter avec user1, mais avec user2, même erreur;
comment puis-je me connecter avec caching_sha2_password
sur le serveur MySQL?
Actuellement, l'extension mysqli php ne supporte pas la nouvelle fonctionnalité d'authentification caching_sha2. Vous devez attendre jusqu'à ce qu'ils publient une mise à jour.
Voir les articles associés aux développeurs mysql: https://mysqlserverteam.com/upgrading-to-mysql-8-0-default-authentication-plugin-considerations/
Ils n'ont pas mentionné PDO, peut-être devriez-vous essayer de vous connecter avec PDO.
Je résous cela par la commande SQL:
ALTER USER 'mysqlUsername'@'localhost' IDENTIFIED WITH mysql_native_password BY 'mysqlUsernamePassword';
qui est référencé par https://dev.mysql.com/doc/refman/8.0/en/alter-user.html
si vous créez un nouvel utilisateur
CREATE USER 'jeffrey'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
qui est référencé par https://dev.mysql.com/doc/refman/8.0/en/create-user.html
ça marche pour moi
ALTER USER 'mysqlUsername'@'localhost' IDENTIFIED WITH mysql_native_password BY 'mysqlUsernamePassword';
Supprimer les guillemets (') après ALTER USER
et conserver les guillemets (') après mysql_native_password BY
Cela fonctionne pour moi aussi.
Si vous utilisez Windows et qu'il est impossible d'utiliser caching_sha2_password
, vous pouvez effectuer les opérations suivantes:
Le programme d'installation apportera toutes les modifications de configuration nécessaires.
J'ai exécuté la commande suivante ALTER USER 'root' @ 'localhost' identified with mysql_native_password BY 'root123';
dans la ligne de commande et enfin redémarrer MySQL dans les services locaux.
Cela fonctionne pour moi (PHP 5.6 + PDO/MySQL Server 8.0/Windows 7 64bits)
Editez le fichier C:\ProgramData\MySQL\MySQL Server 8.0\my.ini
:
default_authentication_plugin=mysql_native_password
Réinitialiser le service MySQL sous Windows et dans le shell MySQL ...
ALTER USER my_user@'%' IDENTIFIED WITH mysql_native_password BY 'password';