Hvorfor sker det?
Hele
ext/mysql
PHP-udvidelse, som giver alle funktioner navngivet med præfiksetmysql_
, 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.
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 .Jeg forstår, at det er muligt at undertrykke udfasningsfejl ved at indstille
error_reporting
iphp.ini
for at ekskludereE_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 medext/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 kunE_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.