Varför händer detta?
Hela
ext/mysql
PHP-tillägg, som ger alla funktioner namngivna med prefixetmysql_
, var officiellt fasad i PHP v5.5.0 och borttagen i PHP v7 .Det introducerades ursprungligen i PHP v2.0 (november 1997) för MySQL v3.20, och inga nya funktioner har lagts till sedan 2006. Tillsammans med bristen på nya funktioner är svårigheter att underhålla så gammal kod mitt i komplexa säkerhetsbrister.
Manualen har innehållit varningar mot användning i ny kod sedan juni 2011.
Hur kan jag fixa det?
Som felmeddelandet antyder finns det två andra MySQL-tillägg som du kan överväga:MySQLi och PDO_MySQL , som båda kan användas istället för
ext/mysql
. Båda har funnits i PHP-kärnan sedan v5.0, så om du använder en version som kastar dessa utfasningsfel kan du nästan säkert börja använda dem direkt – dvs. utan någon installationsansträngning.De skiljer sig något, men erbjuder ett antal fördelar jämfört med det gamla tillägget, inklusive API-stöd för transaktioner, lagrade procedurer och förberedda uttalanden (och ger därmed det bästa sättet för att besegra SQL-injektionsattacker ). PHP-utvecklaren Ulf Wendel har skrivit en grundlig jämförelse av funktionerna .
Hashphp.org har en utmärkt handledning om migrering från
ext/mysql
till SUB .Jag förstår att det är möjligt att undertrycka utfasningsfel genom att ställa in
error_reporting
iphp.ini
för att uteslutaE_DEPRECATED
:error_reporting = E_ALL ^ E_DEPRECATED
Vad händer om jag gör det?
Ja, det är möjligt att undertrycka sådana felmeddelanden och fortsätta använda den gamla
ext/mysql
förlängning tills vidare. Men du borde verkligen inte göra det här —Detta är en sista varning från utvecklarna att tillägget kanske inte kommer att buntas med framtida versioner av PHP (som redan nämnts har det faktiskt tagits bort från PHP v7). Istället bör du ta tillfället i akt att migrera din applikation nu , innan det är för sent.Observera också att denna teknik kommer att undertrycka alla
E_DEPRECATED
meddelanden, inte bara de som har medext/mysql
att göra extension:därför kanske du inte är medveten om andra kommande ändringar av PHP som skulle påverka din applikationskod. Det är naturligtvis möjligt att endast undertrycka fel som uppstår på uttrycket i fråga genom att använda PHPs felkontrolloperatör — dvs. före den relevanta raden med@
– Detta kommer dock att undertrycka alla fel som uppstår av det uttrycket, inte baraE_DEPRECATED
ettor.
Vad ska du göra?
-
Du startar ett nytt projekt.
Det finns absolut ingen anledning för att använda
ext/mysql
—välj en av de andra, modernare, tilläggen istället och skörda frukterna av fördelarna de erbjuder. -
Du har (din egen) äldre kodbas som för närvarande är beroende av
ext/mysql
.Det skulle vara klokt att utföra regressionstestning:du borde verkligen inte ändra något (särskilt uppgradering av PHP) tills du har identifierat alla potentiella påverkansområden, planerat runt vart och ett av dem och sedan noggrant testat din lösning i en iscensättningsmiljö.
-
Med god kodningspraxis utvecklades din applikation på ett löst integrerat/modulärt sätt och alla metoder för databasåtkomst är fristående på ett ställe som enkelt kan bytas ut mot en av de nya tilläggen.
Lägg en halvtimme på att skriva om den här modulen för att använda en av de andra, mer moderna, tilläggen; testa ordentligt. Du kan senare införa ytterligare förbättringar för att skörda frukterna av de fördelar de erbjuder.
-
Databasåtkomstmetoderna är utspridda överallt och kan inte enkelt bytas ut mot någon av de nya tilläggen.
Fundera på om du verkligen behöver uppgradera till PHP v5.5 just nu.
Du bör börja planera för att ersätta
ext/mysql
med en av de andra, mer moderna, tilläggen så att du kan skörda frukterna av de fördelar de erbjuder; du kan också använda det som en möjlighet att omstrukturera dina databasåtkomstmetoder till en mer modulär struktur.Men om du har en brådskande behöver uppgradera PHP omedelbart, kan du överväga att undertrycka utfasningsfel för tillfället:men först se till att identifiera eventuella andra utfasningsfel som också kastas.
-
-
Du använder ett tredjepartsprojekt som är beroende av
ext/mysql
.Fundera på om du verkligen behöver uppgradera till PHP v5.5 just nu.
Kontrollera om utvecklaren har släppt några korrigeringar, lösningar eller vägledning i samband med detta specifika problem; eller, om inte, pressa dem att göra det genom att uppmärksamma dem på denna fråga. Om du har en brådskande behöver uppgradera PHP omedelbart, kan du överväga att undertrycka utfasningsfel för tillfället:men först se till att identifiera eventuella andra utfasningsfel som också kastas.
Det är absolut nödvändigt att utföra regressionstestning.