sql >> Databasteknik >  >> RDS >> Mysql

Mysql-tillägget är utfasat och kommer att tas bort i framtiden:använd mysqli eller PDO istället

  1. Varför händer detta?

    Hela ext/mysql PHP-tillägg, som ger alla funktioner namngivna med prefixet mysql_ , 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.

  2. 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 .

  3. Jag förstår att det är möjligt att undertrycka utfasningsfel genom att ställa in error_reporting i php.ini för att utesluta E_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 med ext/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 bara E_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.




  1. Ge behörigheter till en MySQL-användare på Linux via kommandoraden

  2. Det effektivaste sättet att lagra IP-adress i MySQL

  3. Hur man lägger till NOT NULL-begränsning i MySQL

  4. ORA-00947 Inte tillräckligt med värden när typ deklareras globalt