166 votes

L'extension mysql est obsolète et sera supprimée à l'avenir : utilisez mysqli ou PDO à la place.

Lorsque je tente de me connecter à un serveur MySQL à partir de PHP, je vois l'erreur suivante :

Déprécié : L'extension mysql est obsolète et sera supprimée dans le futur : utilisez mysqli ou PDO à la place dans /path/to/filename.php on line 123

Le code sur la ligne référencée est :

mysql_connect($server, $username, $password);

Je suis certain que les arguments sont corrects et que ce code exact fonctionne depuis des années sans problème. En effet, je l'ai obtenu à partir d'un tutoriel bien fourni sur PHP.

  1. Pourquoi cela se produit-il ?

  2. Comment puis-je le réparer ?

  3. J'ai cru comprendre qu'il était possible de supprimer les erreurs de dépréciation en définissant les paramètres suivants error_reporting en php.ini d'exclure E_DEPRECATED :

    error_reporting = E_ALL ^ E_DEPRECATED

    Que se passera-t-il si je fais ça ?

181voto

eggyal Points 60363
  1. Pourquoi cela se produit-il ?

    L'ensemble du ext/mysql Extension PHP, qui fournit toutes les fonctions nommées avec le préfixe mysql_ a été officiellement déprécié dans PHP v5.5.0 y supprimé dans PHP v7 .

    Il a été introduit à l'origine dans PHP v2.0 (novembre 1997) pour MySQL v3.20, et aucune nouvelle fonctionnalité n'a été ajoutée depuis 2006. En plus du manque de nouvelles fonctionnalités, il est difficile de maintenir un code aussi ancien au milieu de vulnérabilités de sécurité complexes.

    Le manuel contient des avertissements contre son utilisation dans les nouveaux codes depuis juin 2011.

  2. Comment puis-je le réparer ?

    Comme le suggère le message d'erreur, il existe deux autres extensions MySQL que vous pouvez envisager : MySQLi y PDO_MySQL l'un ou l'autre peut être utilisé à la place de ext/mysql . Les deux sont dans le noyau de PHP depuis la v5.0, donc si vous utilisez une version qui affiche ces erreurs de dépréciation, vous pouvez presque certainement commencer à les utiliser immédiatement, c'est-à-dire sans aucun effort d'installation.

    Ils diffèrent légèrement, mais offrent un certain nombre d'avantages par rapport à l'ancienne extension, notamment la prise en charge par l'API des transactions, des procédures stockées et des instructions préparées (ce qui permet de fournir le meilleur moyen pour vaincre Attaques par injection SQL ). Le développeur PHP Ulf Wendel a écrit une comparaison approfondie des caractéristiques .

    Hashphp.org a un excellent tutoriel sur la migration à partir de ext/mysql à l'AOP .

  3. J'ai cru comprendre qu'il était possible de supprimer les erreurs de dépréciation en définissant les paramètres suivants error_reporting en php.ini d'exclure E_DEPRECATED :

    error_reporting = E_ALL ^ E_DEPRECATED

    Que se passera-t-il si je fais ça ?

    Oui, il est possible de supprimer ces messages d'erreur et de continuer à utiliser l'ancien système de gestion de l'information. ext/mysql pour l'instant. Mais vous ne devriez vraiment pas faire ça -Il s'agit d'un dernier avertissement de la part des développeurs : l'extension ne sera pas fournie avec les futures versions de PHP (en effet, comme déjà mentionné, elle a été retirée de PHP v7). A la place, vous devriez profiter de cette opportunité pour migrer votre application. maintenant avant qu'il ne soit trop tard.

    Notez également que cette technique supprimera tous E_DEPRECATED messages, et pas seulement ceux qui concernent le ext/mysql Vous n'êtes donc peut-être pas au courant d'autres changements à venir dans PHP qui pourraient affecter le code de votre application. Il est, bien sûr, possible de ne supprimer que les erreurs qui surviennent sur l'expression en question en utilisant l'extension PHP opérateur de contrôle des erreurs c'est-à-dire en faisant précéder la ligne concernée de la mention @ -Cependant, cela supprimera tous les erreurs soulevées par cette expression, et pas seulement E_DEPRECATED les uns et les autres.


Que devez-vous faire ?

  • Vous commencez un nouveau projet.

    Il y a absolument aucune raison à utiliser ext/mysql -Choisissez plutôt l'une des autres extensions, plus modernes, et profitez des avantages qu'elles offrent.

  • Vous avez (votre propre) base de code héritée qui dépend actuellement de ext/mysql .

    Il serait judicieux d'effectuer des tests de régression : vous ne devriez vraiment pas modifier tout ce qui est (en particulier la mise à niveau de PHP) jusqu'à ce que vous ayez identifié toutes les zones d'impact potentiel, planifié autour de chacune d'entre elles et testé minutieusement votre solution dans un environnement d'essai.

    • Conformément aux bonnes pratiques de codage, votre application a été développée de manière peu intégrée/modulaire et les méthodes d'accès à la base de données sont toutes autonomes à un endroit qui peut facilement être remplacé par l'une des nouvelles extensions.

      Passez une demi-heure à réécrire ce module pour utiliser l'une des autres extensions, plus modernes, et testez-le minutieusement. Vous pourrez par la suite introduire d'autres améliorations pour bénéficier des avantages qu'elles offrent.

    • Les méthodes d'accès aux bases de données sont dispersées un peu partout et ne peuvent pas être facilement remplacées par l'une des nouvelles extensions.

      Demandez-vous si vous avez vraiment besoin de passer à la version 5.5 de PHP pour le moment.

      Vous devriez commencer à planifier le remplacement ext/mysql avec l'une des autres extensions, plus modernes, afin de bénéficier des avantages qu'elles offrent ; vous pouvez également en profiter pour remanier vos méthodes d'accès aux bases de données selon une structure plus modulaire.

      Cependant, si vous avez un urgent Si vous avez besoin de mettre à jour PHP tout de suite, vous pouvez envisager de supprimer les erreurs de dépréciation pour le moment : mais assurez-vous d'abord d'identifier toutes les autres erreurs de dépréciation qui sont également lancées.

  • Vous utilisez un projet de tierce partie qui dépend de ext/mysql .

    Demandez-vous si vous avez vraiment besoin de passer à la version 5.5 de PHP pour le moment.

    Vérifiez si le développeur a publié des correctifs, des solutions de contournement ou des conseils concernant ce problème spécifique ou, si ce n'est pas le cas, faites pression sur lui pour qu'il le fasse en portant cette question à son attention. Si vous avez un urgent Si vous avez besoin de mettre à jour PHP tout de suite, vous pouvez envisager de supprimer les erreurs de dépréciation pour le moment : mais assurez-vous d'abord d'identifier toutes les autres erreurs de dépréciation qui sont également lancées.

    Il est absolument essentiel d'effectuer des tests de régression.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X