sql >> Database >  >> RDS >> Mysql

De mysql-extensie is verouderd en zal in de toekomst worden verwijderd:gebruik in plaats daarvan mysqli of PDO

  1. Waarom gebeurt dit?

    De volledige ext/mysql PHP-extensie, die alle functies biedt met het voorvoegsel mysql_ , werd officieel beëindigd in PHP v5.5.0 en verwijderd in PHP v7 .

    Het werd oorspronkelijk geïntroduceerd in PHP v2.0 (november 1997) voor MySQL v3.20, en sinds 2006 zijn er geen nieuwe functies toegevoegd. In combinatie met het gebrek aan nieuwe functies zijn er moeilijkheden bij het onderhouden van dergelijke oude code te midden van complexe beveiligingsproblemen.

    De handleiding bevat sinds juni 2011 waarschuwingen tegen het gebruik ervan in nieuwe code.

  2. Hoe kan ik het oplossen?

    Zoals de foutmelding suggereert, zijn er twee andere MySQL-extensies die u kunt overwegen:MySQLi en PDO_MySQL , die beide kunnen worden gebruikt in plaats van ext/mysql . Beide zitten al sinds v5.0 in de PHP-core, dus als je een versie gebruikt die deze afschrijvingsfouten veroorzaakt, kun je ze vrijwel zeker meteen gaan gebruiken, d.w.z. zonder enige installatie-inspanning.

    Ze verschillen enigszins, maar bieden een aantal voordelen ten opzichte van de oude extensie, waaronder API-ondersteuning voor transacties, opgeslagen procedures en voorbereide verklaringen (waardoor de beste manier om SQL-injectie-aanvallen te verslaan ). PHP-ontwikkelaar Ulf Wendel heeft een grondige vergelijking geschreven van de functies .

    Hashphp.org heeft een uitstekende tutorial over het migreren van ext/mysql naar BOB .

  3. Ik begrijp dat het mogelijk is om afschrijvingsfouten te onderdrukken door error_reporting in te stellen in php.ini om E_DEPRECATED uit te sluiten :

    error_reporting = E_ALL ^ E_DEPRECATED
    

    Wat gebeurt er als ik dat doe?

    Ja, het is mogelijk om dergelijke foutmeldingen te onderdrukken en de oude ext/mysql te blijven gebruiken voorlopig verlengen. Maar je zou dit echt niet moeten doen — dit is een laatste waarschuwing van de ontwikkelaars dat de extensie mogelijk niet wordt gebundeld met toekomstige versies van PHP (inderdaad, zoals eerder vermeld, is deze verwijderd uit PHP v7). In plaats daarvan moet u van deze gelegenheid gebruik maken om uw toepassing nu te migreren , voordat het te laat is.

    Merk ook op dat deze techniek alles onderdrukt E_DEPRECATED berichten, niet alleen die met de ext/mysql extensie:daarom bent u mogelijk niet op de hoogte van andere aanstaande wijzigingen in PHP die van invloed zijn op uw applicatiecode. Het is natuurlijk mogelijk om alleen fouten te onderdrukken die zich voordoen op de expressie in kwestie met behulp van PHP's operator voor foutcontrole -d.w.z. de relevante regel voorafgaan met @ -maar dit onderdrukt alles fouten veroorzaakt door die uitdrukking, niet alleen E_DEPRECATED die.

Wat moet je doen?

  • Je begint een nieuw project.

    Er is absoluut geen reden om ext/mysql te gebruiken —kies in plaats daarvan een van de andere, modernere extensies en profiteer van de voordelen die ze bieden.

  • Je hebt (je eigen) legacy codebase die momenteel afhankelijk is van ext/mysql .

    Het zou verstandig zijn om regressietesten uit te voeren:u zou eigenlijk niets moeten veranderen (vooral het upgraden van PHP) totdat je alle potentiële impactgebieden hebt geïdentificeerd, rond elk ervan hebt gepland en vervolgens je oplossing grondig hebt getest in een testomgeving.

    • Volgens goede codeerpraktijken is uw toepassing ontwikkeld op een losjes geïntegreerde/modulaire manier en de methoden voor toegang tot de database zijn allemaal op zichzelf staand op één plaats die gemakkelijk kan worden verwisseld voor een van de nieuwe extensies.

      Besteed een half uur aan het herschrijven van deze module om een ​​van de andere, modernere, extensies te gebruiken; grondig testen. U kunt later verdere verfijningen aanbrengen om de vruchten te plukken van de voordelen die ze bieden.

    • De methoden voor toegang tot de database zijn overal verspreid en kunnen niet gemakkelijk worden vervangen door een van de nieuwe extensies.

      Overweeg of u op dit moment echt moet upgraden naar PHP v5.5.

      U moet beginnen met het plannen van het vervangen van ext/mysql met een van de andere, modernere, extensies zodat u de vruchten kunt plukken van de voordelen die ze bieden; je zou het ook kunnen gebruiken als een kans om je databasetoegangsmethoden te herstructureren in een meer modulaire structuur.

      Als u echter een dringende PHP meteen moet upgraden, kunt u overwegen om afschrijvingsfouten voorlopig te onderdrukken:maar zorg er eerst voor dat u eventuele andere afschrijvingsfouten identificeert die ook worden gegenereerd.

  • U gebruikt een project van derden dat afhankelijk is van ext/mysql .

    Overweeg of u op dit moment echt moet upgraden naar PHP v5.5.

    Controleer of de ontwikkelaar fixes, workarounds of richtlijnen heeft vrijgegeven met betrekking tot dit specifieke probleem; of, zo niet, hen daartoe onder druk zetten door deze kwestie onder hun aandacht te brengen. Als u een dringende heeft PHP meteen moet upgraden, kunt u overwegen om afschrijvingsfouten voorlopig te onderdrukken:maar zorg er eerst voor dat u eventuele andere afschrijvingsfouten identificeert die ook worden gegenereerd.

    Het is absoluut essentieel om regressietesten uit te voeren.




  1. Meerdere records invoegen in orakel

  2. Heeft mysql het equivalent van de analytische functies van Oracle?

  3. Hoe stel ik de timer in om elke n minuten een functie aan te roepen?

  4. TABLOCK versus TABLOCKX