Proč se to děje?
Celý
ext/mysql
Rozšíření PHP, které poskytuje všechny funkce pojmenované s předponoumysql_
, byl oficiálně ukončen v PHP v5.5.0 a odstraněno v PHP v7 .Původně byl představen v PHP v2.0 (listopad 1997) pro MySQL v3.20 a od roku 2006 nebyly přidány žádné nové funkce. Spolu s nedostatkem nových funkcí jsou potíže s udržováním takového starého kódu uprostřed složitých bezpečnostních zranitelností.
Manuál obsahuje varování před jeho použitím v novém kódu od června 2011.
Jak to mohu opravit?
Jak naznačuje chybová zpráva, existují dvě další rozšíření MySQL, která můžete zvážit:MySQLi a PDO_MySQL , z nichž obě lze použít místo
ext/mysql
. Oba jsou v jádru PHP od verze 5.0, takže pokud používáte verzi, která hází tyto chyby zavržení, můžete je téměř jistě rovnou začít používat – tzn. bez jakékoli námahy při instalaci.Mírně se liší, ale nabízejí řadu výhod oproti starému rozšíření, včetně podpory API pro transakce, uložené procedury a připravené výpisy (čímž poskytují nejlepší způsob porazit útoky SQL injection ). PHP vývojář Ulf Wendel napsal důkladné srovnání funkce .
Hashphp.org má výborný návod na migraci z
ext/mysql
na CHOP .Chápu, že je možné potlačit chyby při ukončení podpory nastavením
error_reporting
vphp.ini
vyloučitE_DEPRECATED
:error_reporting = E_ALL ^ E_DEPRECATED
Co se stane, když to udělám?
Ano, je možné takové chybové zprávy potlačit a nadále používat starý
ext/mysql
prozatím prodloužení. Ale tohle byste opravdu neměli dělat —toto je poslední varování od vývojářů, že rozšíření nemusí být součástí budoucích verzí PHP (jak již bylo řečeno, bylo odstraněno z PHP v7). Místo toho byste měli využít této příležitosti k migraci své aplikace teď , než bude příliš pozdě.Všimněte si také, že tato technika potlačí vše
E_DEPRECATED
zprávy, nejen ty, které mají co do činění sext/mysql
rozšíření:proto možná nevíte o dalších nadcházejících změnách PHP, které by ovlivnily kód vaší aplikace. Je samozřejmě možné pouze potlačit chyby, které vzniknou u sporného výrazu, pomocí PHP operátor kontroly chyb -tj. přidáním@
před příslušný řádek —to však potlačí vše chyby vyvolané tímto výrazem, nejenE_DEPRECATED
jedničky.
Co byste měli udělat?
-
Zahajujete nový projekt.
Neexistuje absolutně žádný důvod použít
ext/mysql
—vyberte si místo toho jedno z jiných, modernějších rozšíření a získejte odměny za výhody, které nabízejí. -
Máte (svou vlastní) starší kódovou základnu, která aktuálně závisí na
ext/mysql
.Bylo by moudré provést regresní testování:opravdu byste neměli nic měnit (zejména upgrade PHP), dokud neidentifikujete všechny potenciální oblasti dopadu, naplánujete kolem každé z nich a poté své řešení důkladně otestujete ve zkušebním prostředí.
-
V souladu s osvědčenými postupy kódování byla vaše aplikace vyvinuta volně integrovaným/modulárním způsobem a všechny metody přístupu k databázi jsou samostatné na jednom místě, které lze snadno vyměnit za jedno z nových rozšíření.
Věnujte půl hodiny přepisování tohoto modulu, abyste mohli používat jedno z dalších, modernějších rozšíření; důkladně otestovat. Později můžete zavést další vylepšení, abyste mohli využívat výhod, které nabízejí.
-
Metody přístupu k databázi jsou roztroušeny po celém místě a nelze je snadno vyměnit za jedno z nových rozšíření.
Zvažte, zda v tuto chvíli opravdu potřebujete upgradovat na PHP v5.5.
Měli byste začít plánovat nahrazení
ext/mysql
s jedním z dalších modernějších rozšíření, abyste mohli sklízet plody výhod, které nabízejí; můžete jej také využít jako příležitost k přeměně metod přístupu k databázi do modulárnější struktury.Pokud však máte urgentní potřebujete okamžitě upgradovat PHP, můžete prozatím zvážit potlačení chyb při ukončení podpory:ale nejprve se ujistěte, že identifikujete všechny další chyby při ukončení podpory, které jsou také vyvolány.
-
-
Používáte projekt třetí strany, který závisí na
ext/mysql
.Zvažte, zda v tuto chvíli opravdu potřebujete upgradovat na PHP v5.5.
Zkontrolujte, zda vývojář nevydal nějaké opravy, zástupná řešení nebo pokyny týkající se tohoto konkrétního problému; nebo pokud ne, donuťte je, aby tak učinili tím, že je na tuto záležitost upozorníte. Pokud máte naléhavou potřebujete okamžitě upgradovat PHP, můžete prozatím zvážit potlačení chyb při ukončení podpory:ale nejprve se ujistěte, že identifikujete všechny další chyby při ukončení podpory, které jsou také vyvolány.
Je naprosto nezbytné provést regresní testování.