Maison  >  Article  >  base de données  >  Pourquoi est-ce que j'obtiens l'erreur « Paquet OK 6 octets plus court que prévu » lors de la connexion à une base de données MySQL distante avec PHP 5.3.0 ?

Pourquoi est-ce que j'obtiens l'erreur « Paquet OK 6 octets plus court que prévu » lors de la connexion à une base de données MySQL distante avec PHP 5.3.0 ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-02 10:35:02131parcourir

Why am I getting the

Incompatibilité MySQL PHP : compréhension de l'erreur de connexion et résolution

Rencontre de l'erreur « Paquet OK 6 octets plus courts que prévu » lors de la connexion à un Une base de données MySQL distante avec PHP version 5.3.0 peut être un problème déroutant. Pour résoudre ce problème, il est crucial de comprendre la cause sous-jacente et d'appliquer la solution appropriée.

L'erreur indique une incompatibilité entre la version locale de PHP et le serveur MySQL distant. Les versions PHP 5.3.0 et supérieures exigent que les comptes MySQL aient des mots de passe hachés à l'aide du nouveau plugin d'authentification MySQL. Cependant, les anciennes versions de MySQL comme la 5.0.22 peuvent toujours utiliser l'ancienne méthode d'authentification avec des mots de passe à 16 caractères. Cette divergence conduit à l'erreur car PHP 5.3.0 ne parvient pas à interpréter correctement la réponse du serveur MySQL.

Pour résoudre ce problème, il existe deux solutions possibles :

  • Définissez un nouveau mot de passe : Pour le compte rencontrant l'erreur, utilisez un client MySQL pour exécuter la commande "SET PASSWORD FOR 'username'@'hostmask' = PASSWORD('thepassword')" pour générer un nouveau mot de passe haché. Cela mettra à jour le mot de passe du compte avec le nouveau format d'authentification.
  • Configurez le serveur MySQL : Vous pouvez également vérifier si le serveur MySQL est configuré pour utiliser l'ancienne méthode d'authentification par défaut. Si tel est le cas, vous pouvez modifier les paramètres du serveur pour appliquer le nouveau plugin d'authentification et interdire les anciens mots de passe.

Pour déterminer si le compte utilise un ancien mot de passe à 16 caractères, exécutez la requête :

SELECT
  Length(`Password`),
  Substring(`Password`, 1, 1)
FROM
  `mysql`.`user`
WHERE
  `user`='username'

Sur le serveur problématique 5.0.22, remplacer 'username' par le compte en question. Si le résultat indique une longueur de mot de passe de 16 et que le premier caractère est un chiffre hexadécimal (0-9 ou A-F), cela indique un ancien mot de passe.

En comprenant la cause sous-jacente et en appliquant la solution appropriée, vous pouvez résolvez l'incompatibilité MySQL PHP et établissez une connexion réussie à la base de données distante.

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