sql >> Database teknologi >  >> RDS >> Mysql

Mysql-udvidelsen er forældet og vil blive fjernet i fremtiden:brug mysqli eller PDO i stedet

  1. Hvorfor sker det?

    Hele ext/mysql PHP-udvidelse, som giver alle funktioner navngivet med præfikset mysql_ , blev officielt forældet i PHP v5.5.0 og fjernet i PHP v7 .

    Det blev oprindeligt introduceret i PHP v2.0 (november 1997) til MySQL v3.20, og ingen nye funktioner er blevet tilføjet siden 2006. Sammen med manglen på nye funktioner er det vanskeligheder med at vedligeholde en sådan gammel kode midt i komplekse sikkerhedssårbarheder.

    Manualen har indeholdt advarsler mod dens brug i ny kode siden juni 2011.

  2. Hvordan kan jeg rette det?

    Som fejlmeddelelsen antyder, er der to andre MySQL-udvidelser, som du kan overveje:MySQLi og PDO_MySQL , som begge kan bruges i stedet for ext/mysql . Begge har været i PHP-kernen siden v5.0, så hvis du bruger en version, der kaster disse afskrivningsfejl, så kan du næsten helt sikkert bare begynde at bruge dem med det samme - dvs. uden nogen installationsindsats.

    De adskiller sig lidt, men tilbyder en række fordele i forhold til den gamle udvidelse, herunder API-understøttelse af transaktioner, lagrede procedurer og forberedte erklæringer (derved giver den bedste måde at besejre SQL-injektionsangreb ). PHP-udvikler Ulf Wendel har skrevet en grundig sammenligning af funktionerne .

    Hashphp.org har en fremragende vejledning om migrering fra ext/mysql til BOB .

  3. Jeg forstår, at det er muligt at undertrykke udfasningsfejl ved at indstille error_reporting i php.ini for at ekskludere E_DEPRECATED :

    error_reporting = E_ALL ^ E_DEPRECATED
    

    Hvad sker der, hvis jeg gør det?

    Ja, det er muligt at undertrykke sådanne fejlmeddelelser og fortsætte med at bruge den gamle ext/mysql forlængelse indtil videre. Men du burde virkelig ikke gøre dette — Dette er en sidste advarsel fra udviklerne om, at udvidelsen muligvis ikke er bundtet med fremtidige versioner af PHP (som allerede nævnt er den faktisk blevet fjernet fra PHP v7). I stedet bør du benytte lejligheden til at migrere din applikation nu , før det er for sent.

    Bemærk også, at denne teknik vil undertrykke alle E_DEPRECATED meddelelser, ikke kun dem, der har at gøre med ext/mysql udvidelse:derfor er du muligvis uvidende om andre kommende ændringer til PHP, som vil påvirke din applikationskode. Det er selvfølgelig kun muligt at undertrykke fejl, der opstår på det pågældende udtryk ved at bruge PHP's fejlkontroloperatør – dvs. foran den relevante linje med @ – Dette vil dog undertrykke alle fejl forårsaget af det udtryk, ikke kun E_DEPRECATED dem.

Hvad skal du gøre?

  • Du starter et nyt projekt.

    Der er absolut ingen grund at bruge ext/mysql — vælg i stedet en af ​​de andre, mere moderne udvidelser, og høst frugterne af de fordele, de tilbyder.

  • Du har (din egen) ældre kodebase, der i øjeblikket afhænger af ext/mysql .

    Det ville være klogt at udføre regressionstest:du burde virkelig ikke ændre noget (især opgradering af PHP), indtil du har identificeret alle de potentielle påvirkningsområder, planlagt omkring hvert af dem og derefter grundigt testet din løsning i et iscenesættelsesmiljø.

    • Efter god kodningspraksis blev din applikation udviklet på en løst integreret/modulær måde, og databaseadgangsmetoderne er alle selvstændige på ét sted, der nemt kan byttes ud med en af ​​de nye udvidelser.

      Brug en halv time på at omskrive dette modul for at bruge en af ​​de andre, mere moderne udvidelser; test grundigt. Du kan senere indføre yderligere justeringer for at høste frugterne af de fordele, de tilbyder.

    • Databaseadgangsmetoderne er spredt over det hele og kan ikke nemt skiftes ud med en af ​​de nye udvidelser.

      Overvej, om du virkelig har brug for at opgradere til PHP v5.5 på nuværende tidspunkt.

      Du bør begynde at planlægge at erstatte ext/mysql med en af ​​de andre, mere moderne udvidelser, så du kan høste frugterne af de fordele, de tilbyder; du kan også bruge det som en mulighed for at omstrukturere dine databaseadgangsmetoder til en mere modulær struktur.

      Men hvis du har en haster skal opgradere PHP med det samme, kan du overveje at undertrykke udfasningsfejl indtil videre:men sørg først for at identificere eventuelle andre udfasningsfejl, der også bliver smidt.

  • Du bruger et tredjepartsprojekt, der afhænger af ext/mysql .

    Overvej, om du virkelig har brug for at opgradere til PHP v5.5 på nuværende tidspunkt.

    Tjek, om udvikleren har udgivet nogen rettelser, løsninger eller vejledning i forhold til dette specifikke problem; eller, hvis ikke, pres dem til at gøre det ved at gøre dem opmærksom på denne sag. Hvis du har en haster skal opgradere PHP med det samme, kan du overveje at undertrykke udfasningsfejl indtil videre:men sørg først for at identificere eventuelle andre udfasningsfejl, der også bliver smidt.

    Det er absolut nødvendigt at udføre regressionstest.




  1. Postgres:vælg summen af ​​værdier, og summer dette igen

  2. Kortlægning af PostgreSQL-tekst[][]-type og Java-type

  3. Hvordan kombinerer jeg data fra to separate tabeller til en enkelt markør?

  4. TSQL:Opret en visning, der har adgang til flere databaser