PHP 4 et MySQL 5

Si vous avez suivi mes mésaventures avec PHP, vous savez que j’ai fait quelques tests avec PHP 4. Ce que vous ne savez pas, c’est qu’avant de galérer avec PHP, j’ai passé « un peu » de temps sur un problème assez ancien et connu, mais que j’oublie presque à chaque fois: l’incompatibilité entre PHP 4 et MySQL 5. Au cas ou l’auriez oublié vous aussi, voici de quoi vous éviter quelques heures de recherche.

L’histoire est que MySQL a changé de mode d’authentification entre la version 4 et la version 5. Les librairies de PHP 4 elles, sont restées dans l’ancien mode.

Donc quand vous tentez une connexion à une base de données MySQL 5 avec les fonctions PHP 4, vous obtenez un beau message du type: Error establishing a database connection.

La solution est simple: il faut changer le mode d’authentification de MySQL,

  • soit de façon globale, au moment du chargement de MySQL,
  • soit au niveau du compte que vous utilisez.

Dans le premier cas, il suffit de lancer mysql avec l’option --old-passwords. Par exemple: mysqld --old-passwords.

Pour le second cas, il existe plusieurs méthodes, qui nécessitent, dans tous les cas, l’utilitaire mysql. Dans cette outil:

  • Si vous êtes connecté avec le compte dont il faut changer le mot de passe, la ligne de commande sera:
    SET PASSWORD = OLD_PASSWORD(<mot de passe>);
  • Si vous êtes dans le compte root, et que vous souhaitez modifier le mot de passe d’un autre compte, la syntaxe sera:
    mysql&gt; SET PASSWORD FOR 'some_user'@'some_host' = OLD_PASSWORD('newpwd');
  • ou encore
    mysql> UPDATE mysql.user SET Password = OLD_PASSWORD('newpwd') WHERE Host = 'some_host' AND USER = 'some_user';
    mysql> FLUSH PRIVILEGES;

Si vous repassez à PHP 5, il faudra de nouveau modifier le mot de passe, en remplaçant la fonction OLD_PASSWORD par PASSWORD.

J’utilise Xamp pour ma plateforme de développement. Cette application est très pratique car elle intègre un serveur MySQL, un serveur Apache, et des versions 4 et 5 de PHP. Je déconseille la toute dernière version d’ailleurs, parce que justement, elle n’intègre plus PHP 4.

Pour passer de PHP 4 à 5 et inversement, l’application met à notre disposition le script php_switch.bat (sous Windows, ou php_switch.sh sous Linux).
Pour éviter de me connecter à MySQL et taper les commandes à chaque fois que je change de version, j’ai ajouté ses commandes dans le fichier .bat.

Conclusion

J’espère que ce petit rappel vous sera utile. Personnellement, j’espère surtout que le fait de l’avoir écrit me permettra de le retenir une bonne fois pour toute.

4 thoughts on “PHP 4 et MySQL 5”

  1. Merci de cette info, j’ai été confronté à ce problème.

    J’utilise simultanément php5 et php4 (compilé en cgi uniquement) sur un même vhost apache (oui oui !) avec un mysql 5.1 et j’ai contourné le problème en simplement créant un 2nd user qui est en compatibilité mysql 4.0 (via phpmyadmin, c’est cette option qui enregistre en old_password)

    Merci bien pour cette astuce 🙂

  2. Je viens d’avoir le cas, selon la version de mysql il faut parfois le redémarrer avant que la modification par la requête SET soit prise en compte. étonnant non ?

  3. formidable !!!
    Vous venez de résoudre mon problème.
    Merci beaucoup 🙂

  4. Je n’ai jamais été confronté à ce problème car les versions de PHP et de MySQL ont toujours étaient les même pour moi, mais c’est bon à savoir 🙂

    Personnellement j’utilise Wamp et je peux toujours switcher entre PHP4/5 (Windows)

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *