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

L'estensione mysql è deprecata e verrà rimossa in futuro:usa invece mysqli o PDO

  1. Perché sta succedendo?

    L'intero ext/mysql Estensione PHP, che fornisce tutte le funzioni denominate con il prefisso mysql_ , è stato ufficialmente deprecato in PHP v5.5.0 e rimosso in PHP v7 .

    È stato originariamente introdotto in PHP v2.0 (novembre 1997) per MySQL v3.20 e dal 2006 non sono state aggiunte nuove funzionalità. Insieme alla mancanza di nuove funzionalità, ci sono difficoltà nel mantenere un codice così vecchio in mezzo a complesse vulnerabilità di sicurezza.

    Il manuale contiene avvertenze contro il suo utilizzo nel nuovo codice da giugno 2011.

  2. Come posso risolverlo?

    Come suggerisce il messaggio di errore, ci sono altre due estensioni MySQL che puoi prendere in considerazione:MySQLi e PDO_MySQL , uno dei quali può essere utilizzato al posto di ext/mysql . Entrambi sono stati nel core PHP dalla v5.0, quindi se stai usando una versione che sta generando questi errori di deprecazione, puoi quasi sicuramente iniziare a usarli subito, ad es. senza alcuno sforzo di installazione.

    Differiscono leggermente, ma offrono una serie di vantaggi rispetto alla vecchia estensione, incluso il supporto API per transazioni, procedure archiviate e istruzioni preparate (fornendo così il modo migliore per sconfiggere Attacchi SQL injection ). Lo sviluppatore PHP Ulf Wendel ha scritto un confronto approfondito di le caratteristiche .

    Hashphp.org ha un eccellente tutorial sulla migrazione da ext/mysql alla DOP .

  3. Comprendo che è possibile eliminare gli errori di ritiro impostando error_reporting in php.ini per escludere E_DEPRECATED :

    error_reporting = E_ALL ^ E_DEPRECATED
    

    Cosa succede se lo faccio?

    Sì, è possibile eliminare tali messaggi di errore e continuare a utilizzare il vecchio ext/mysql proroga per il momento. Ma non dovresti proprio farlo —questo è un ultimo avvertimento da parte degli sviluppatori che l'estensione potrebbe non essere inclusa nelle versioni future di PHP (anzi, come già accennato, è stata rimossa da PHP v7). Dovresti invece cogliere questa opportunità per migrare la tua applicazione ora , prima che sia troppo tardi.

    Nota anche che questa tecnica sopprimerà tutto E_DEPRECATED messaggi, non solo quelli che hanno a che fare con ext/mysql estensione:pertanto potresti non essere a conoscenza di altre imminenti modifiche a PHP che potrebbero influire sul codice dell'applicazione. Ovviamente è possibile eliminare solo gli errori che si verificano sull'espressione in questione utilizzando operatore di controllo degli errori -cioè. anteponendo la riga pertinente con @ —tuttavia questo eliminerà tutti errori generati da quell'espressione, non solo E_DEPRECATED quelli.

Cosa dovresti fare?

  • Stai iniziando un nuovo progetto.

    Non c'è assolutamente nessun motivo per usare ext/mysql —scegli invece una delle altre estensioni, più moderne, e ottieni i frutti dei vantaggi che offrono.

  • Hai (la tua) base di codice legacy che attualmente dipende da ext/mysql .

    Sarebbe saggio eseguire test di regressione:non dovresti davvero cambiare niente (in particolare l'aggiornamento di PHP) fino a quando non hai identificato tutte le potenziali aree di impatto, pianificato attorno a ciascuna di esse e quindi testato a fondo la tua soluzione in un ambiente di staging.

    • Seguendo una buona pratica di codifica, l'applicazione è stata sviluppata in modo vagamente integrato/modulare e i metodi di accesso al database sono tutti autonomi in un'unica posizione che può essere facilmente sostituita con una delle nuove estensioni.

      Trascorri mezz'ora a riscrivere questo modulo per utilizzare una delle altre estensioni più moderne; prova a fondo. In seguito potrai introdurre ulteriori perfezionamenti per raccogliere i frutti dei vantaggi che offrono.

    • I metodi di accesso al database sono sparsi ovunque e non possono essere sostituiti facilmente con una delle nuove estensioni.

      Valuta se è davvero necessario eseguire l'aggiornamento a PHP v5.5 in questo momento.

      Dovresti iniziare a pianificare la sostituzione di ext/mysql con una delle altre estensioni, più moderne, in modo da poter raccogliere i frutti dei vantaggi che offrono; potresti anche usarlo come un'opportunità per riformulare i tuoi metodi di accesso al database in una struttura più modulare.

      Tuttavia, se hai un urgente è necessario aggiornare PHP immediatamente, potresti prendere in considerazione la possibilità di eliminare gli errori di deprecazione per il momento:ma prima assicurati di identificare eventuali altri errori di deprecazione che vengono generati.

  • Stai utilizzando un progetto di terze parti che dipende da ext/mysql .

    Valuta se è davvero necessario eseguire l'aggiornamento a PHP v5.5 in questo momento.

    Verificare se lo sviluppatore ha rilasciato correzioni, soluzioni alternative o indicazioni in relazione a questo problema specifico; o, in caso contrario, spingerli a farlo portando la questione alla loro attenzione. Se hai un urgente è necessario aggiornare PHP immediatamente, potresti prendere in considerazione la possibilità di eliminare gli errori di deprecazione per il momento:ma prima assicurati di identificare eventuali altri errori di deprecazione che vengono generati.

    È assolutamente essenziale eseguire test di regressione.