L'extension mysql est dépréciée et sera supprimée dans le futur: utilisez plutôt mysqli ou PDO [dupliquer]

cette question a déjà une réponse ici:

quand 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é à l'avenir: utilisez mysqli ou PDO à la place dans /path/to/filename.php sur la ligne 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 ce code exact a fonctionné pendant 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. je comprends qu'il est possible de supprimer les erreurs de dépréciation en mettant error_reporting dans php.ini pour exclure E_DEPRECATED :

    error_reporting = E_ALL ^ E_DEPRECATED
    

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

152
demandé sur eggyal 2012-12-19 07:11:43

1 réponses

  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 déprécié en PHP v5.5.0 et supprimé en PHP v7 .

    il a été introduit à L'origine en PHP v2.0 (novembre 1997) pour MySQL v3.20, et aucune nouvelle fonctionnalité n'a été ajoutée depuis 2006. En plus de l'absence de nouvelles fonctionnalités, il est difficile de maintenir cet ancien code 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 le réparer?

    comme le suggère le message d'erreur, il y a deux autres extensions MySQL que vous pouvez considérer: MySQLi et PDO_MySQL , l'un ou l'autre pouvant être utilisé à la place de ext/mysql . Les deux sont dans PHP core depuis v5.0, donc si vous utilisez une version qui envoie ces erreurs de dépréciation, alors vous pouvez presque certainement commencer à les utiliser tout de suite, 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, y compris le soutien API pour les transactions, les procédures stockées et déclarations préparées (fournissant ainsi la meilleure façon 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 de ext/mysql à AOP .

  3. je comprends qu'il est possible de supprimer erreurs de dépréciation en mettant error_reporting dans php.ini pour 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'ancienne extension ext/mysql pour le moment. Mais vous ne devriez vraiment pas faire cela -c'est un avertissement final des développeurs que l'extension ne peut pas être livré avec des versions futures de PHP (en effet, comme déjà mentionné, il a été supprimé de PHP v7). Vous devriez plutôt profiter de cette occasion pour migrer votre application maintenant , avant qu'il ne soit trop tard.

    Notez aussi que cette technique supprimera les messages all "1519690920 E_DEPRECATED , pas seulement ceux qui concernent l'extension ext/mysql : par conséquent, vous pouvez ne pas être au courant d'autres changements à venir à PHP qui affecteraient votre code d'application. Il est, de bien sûr, il est possible de supprimer uniquement les erreurs qui se produisent sur l'expression en question en utilisant "error control operator de PHP-c'est-à-dire en préprogrammant la ligne pertinente avec @ - mais cela supprimera toutes les erreurs soulevées par cette expression, et pas seulement E_DEPRECATED .


Que faire?

  • Vous êtes le démarrage d'un nouveau projet.

    il y a absolument aucune raison d'utiliser ext/mysql - choisissez l'une des autres, plus moderne, extensions à la place et récolter les fruits des avantages qu'elles offrent.

  • vous avez (votre propre) codebase legacy qui dépend actuellement de ext/mysql .

    Il serait sage d'effectuer la régression test: vous ne devriez vraiment pas changer n'importe quoi (en particulier la mise à niveau de PHP) jusqu'à ce que vous avez identifié tous les domaines potentiels d'impact, planifié autour de chacun d'eux et ensuite testé votre solution dans un environnement de staging.

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

      passez une demi-heure à réécrire ce module pour utiliser l'un des autres, plus modernes, extensions; tester à fond. Vous pouvez ensuite introduire de nouvelles améliorations à récolter les fruits des avantages qu'ils offrent.

    • les méthodes d'accès à la base de données sont dispersées partout et ne peuvent pas facilement être échangées pour l'une des nouvelles extension.

      examiner si vous avez vraiment besoin de mettre à jour à PHP v5.5 en ce moment.

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

      cependant, si vous avez un urgent besoin de mettre PHP à jour immédiatement, vous pourriez envisager de supprimer les erreurs de deprecation pour le moment: mais d'abord assurez-vous d'identifier toutes les autres erreurs de deprecation qui sont également lancées.

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

    examiner si vous avez vraiment besoin de mettre à jour à PHP v5.5 en ce moment.

    vérifier si le développeur a publié des correctifs, des solutions de rechange ou des conseils relativement à cette question particulière; ou, si ce n'est pas le cas, exercer des pressions sur lui pour qu'il le fasse en portant cette question à son attention. Si vous avez un urgent besoin de mettre à jour PHP tout de suite, vous pourriez envisager de supprimer les erreurs d'obsolescence pour le moment: mais tout d'abord, assurez-vous d'identifier toutes les autres erreurs d'obsolescence qui sont également lancées.

    il est absolument indispensable pour effectuer des tests de régression.

172
répondu eggyal 2017-05-23 10:31:35