Incompatibilité MySQL PHP : comprendre l'erreur
Le problème décrit dans la question survient lors de la tentative de connexion à une base de données MySQL distante à partir d'un local Installation WAMP exécutant PHP 5.3.0. Bien que la connexion à une base de données exécutant MySQL 5.0.45 réussisse, la connexion à une base de données avec la version 5.0.22 entraîne l'erreur suivante :
Warning: mysql_connect() [function.mysql-connect]: OK packet 6 bytes shorter than expected. PID=5880 in ... Warning: mysql_connect() [function.mysql-connect]: mysqlnd cannot connect to MySQL 4.1+ using old authentication in ...
Explication
La cause première de cette incompatibilité vient de la longueur du mot de passe du compte MySQL utilisé pour la connexion. En règle générale, les comptes MySQL créés avec des versions antérieures utilisaient des mots de passe à 16 caractères. Cependant, les versions plus récentes de PHP, telles que PHP 5.3.0, ne prennent plus en charge l'authentification avec ces anciens mots de passe.
Solution
Pour résoudre le problème, le mot de passe de le compte MySQL concerné doit être réinitialisé à l'aide d'une commande telle que :
SET PASSWORD FOR 'username'@'hostmask' = PASSWORD('thepassword')
De plus, il est conseillé de vérifier si le serveur est configuré pour utiliser ou créer d'anciens mots de passe par défaut.
Requête de diagnostic
Pour diagnostiquer davantage le problème, la requête suivante peut être exécutée sur le serveur MySQL problématique pour déterminer la longueur du mot de passe :
SELECT Length(`Password`), Substring(`Password`, 1, 1) FROM `mysql`.`user` WHERE `user`='username'
Remplacer 'nom d'utilisateur' par le nom d'utilisateur réel utilisé pour la connexion à la base de données fournira des informations sur la longueur du mot de passe et le premier caractère du mot de passe, ce qui peut aider à confirmer s'il s'agit d'un mot de passe de style ancien.
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!