Mysql
 sql >> Base de données >  >> RDS >> Mysql

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

  1. Pourquoi cela se produit-il ?

    L'intégralité de ext/mysql Extension PHP, qui fournit toutes les fonctions nommées avec le préfixe mysql_ , était officiellement obsolète dans PHP v5.5.0 et 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. Couplé au 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 le nouveau code depuis juin 2011.

  2. Comment puis-je résoudre ce problème ?

    Comme le message d'erreur le suggère, il existe deux autres extensions MySQL que vous pouvez envisager :MySQLi et PDO_MySQL , l'un ou l'autre pouvant être utilisé à la place de ext/mysql . Les deux sont dans le noyau PHP depuis la v5.0, donc si vous utilisez une version qui génère 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 de l'API pour les transactions, les procédures stockées et les instructions préparées (fournissant ainsi le meilleur moyen pour vaincre les les attaques par injection SQL ). Le développeur PHP Ulf Wendel a écrit une comparaison approfondie de les fonctionnalités .

    Hashphp.org a un excellent tutoriel sur la migration depuis ext/mysql à AOP .

  3. Je comprends qu'il est possible de supprimer les erreurs d'obsolescence en définissant error_reporting dans php.ini pour exclure E_DEPRECATED :

    error_reporting = E_ALL ^ E_DEPRECATED
    

    Que se passera-t-il si je fais cela ?

    Oui, il est possible de supprimer ces messages d'erreur et de continuer à utiliser l'ancien ext/mysql prolongation pour le moment. Mais vous ne devriez vraiment pas faire ça - il s'agit d'un dernier avertissement des développeurs indiquant que l'extension ne sera peut-être pas intégrée aux futures versions de PHP (en effet, comme déjà mentionné, elle a été supprimée de PHP v7). Au lieu de cela, vous devriez saisir cette opportunité pour migrer votre application maintenant , avant qu'il ne soit trop tard.

    Notez également que cette technique supprimera tous E_DEPRECATED messages, pas seulement ceux liés à ext/mysql extension :par conséquent, vous n'êtes peut-être pas au courant d'autres modifications à venir de PHP qui affecteraient le code de votre application. Il est bien sûr possible de supprimer uniquement les erreurs qui surviennent sur l'expression en question en utilisant le opérateur de contrôle d'erreur -c'est à dire. en ajoutant la ligne appropriée avec @ - cependant, cela supprimera tous erreurs générées par cette expression, pas seulement E_DEPRECATED ceux.

Que devez-vous faire ?

  • Vous démarrez un nouveau projet.

    Il n'y a absolument aucune raison utiliser ext/mysql – choisissez plutôt l'une des autres extensions, plus modernes, et récoltez les fruits des avantages qu'elles offrent.

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

    Il serait sage d'effectuer des tests de régression :vous ne devriez vraiment pas changer rien (en particulier la mise à niveau de PHP) jusqu'à ce que vous ayez identifié tous les domaines d'impact potentiels, planifié autour de chacun d'eux, puis testé minutieusement votre solution dans un environnement de test.

    • Conformément aux bonnes pratiques de codage, votre application a été développée de manière vaguement intégrée/modulaire et les méthodes d'accès à la base de données sont toutes autonomes en un seul 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; tester à fond. Vous pouvez ensuite introduire d'autres améliorations pour récolter les fruits des avantages qu'elles offrent.

    • Les méthodes d'accès à la base de données sont éparpillé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 à PHP v5.5 à ce stade.

      Vous devriez commencer à planifier le remplacement de ext/mysql avec l'une des autres extensions, plus modernes, afin que vous puissiez récolter les fruits des avantages qu'elles offrent ; vous pouvez également l'utiliser comme une opportunité de refactoriser vos méthodes d'accès à la base de données dans une structure plus modulaire.

      Cependant, si vous avez une urgence devez mettre à jour PHP immédiatement, vous pouvez envisager de supprimer les erreurs de dépréciation pour le moment :mais assurez-vous d'abord d'identifier toute autre erreur de dépréciation qui est également générée.

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

    Demandez-vous si vous avez vraiment besoin de passer à PHP v5.5 à ce stade.

    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 eux pour qu'ils le fassent en portant cette question à leur attention. Si vous avez un urgent devez mettre à jour PHP immédiatement, vous pouvez envisager de supprimer les erreurs de dépréciation pour le moment :mais assurez-vous d'abord d'identifier toute autre erreur de dépréciation qui est également générée.

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