Maison > base de données > tutoriel mysql > Pourquoi MySQL_connect() échoue-t-il avec « paquet OK 6 octets plus court que prévu » lors de la connexion à une base de données MySQL 5.0.22 distante à partir de PHP 5.3.0 ?

Pourquoi MySQL_connect() échoue-t-il avec « paquet OK 6 octets plus court que prévu » lors de la connexion à une base de données MySQL 5.0.22 distante à partir de PHP 5.3.0 ?

Susan Sarandon
Libérer: 2024-11-07 05:10:02
original
256 Les gens l'ont consulté

Why does MySQL_connect() fail with

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 ...
Copier après la connexion

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')
Copier après la connexion

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'
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal