Защо се случва това?
Целият
ext/mysql
PHP разширение, което предоставя всички функции, наречени с префиксаmysql_
, беше официално оттеглено в PHP v5.5.0 и премахнат в PHP v7 .Първоначално беше въведен в PHP v2.0 (ноември 1997 г.) за MySQL v3.20 и не са добавяни нови функции от 2006 г. В съчетание с липсата на нови функции са трудности при поддържането на такъв стар код сред сложни уязвимости в сигурността.
Ръководството съдържа предупреждения срещу използването му в нов код от юни 2011 г.
Как мога да го поправя?
Както подсказва съобщението за грешка, има две други разширения на MySQL, които можете да разгледате:MySQLi и PDO_MySQL , всеки от които може да се използва вместо
ext/mysql
. И двете са в ядрото на PHP от v5.0, така че ако използвате версия, която хвърля тези грешки при оттеглянето, тогава почти със сигурност можете просто да започнете да ги използвате веднага – т.е. без никакви усилия за инсталиране.Те се различават леко, но предлагат редица предимства пред старото разширение, включително поддръжка на API за транзакции, съхранени процедури и подготвени оператори (като по този начин предоставят най-добрият начин за да победите атаки с инжектиране на SQL ). PHP разработчикът Улф Вендел е написал задълбочено сравнение на характеристики .
Hashphp.org има отличен урок за мигриране от
ext/mysql
към ЗНП .Разбирам, че е възможно да се потискат грешките при оттеглянето чрез задаване на
error_reporting
вphp.ini
за изключване наE_DEPRECATED
:error_reporting = E_ALL ^ E_DEPRECATED
Какво ще се случи, ако го направя?
Да, възможно е да се потискат подобни съобщения за грешки и да се продължи използването на стария
ext/mysql
удължаване за момента. Нонаистина не трябва да правите това —това е последното предупреждение от разработчиците, че разширението може да не бъде в комплект с бъдещи версии на PHP (всъщност, както вече споменахме, то е премахнато от PHP v7). Вместо това трябва да използвате тази възможност, за да мигрирате приложението си сега , преди да е станало твърде късно.Имайте предвид също, че тази техника ще потисне всички
E_DEPRECATED
съобщения, а не само тези, свързани сext/mysql
разширение:следователно може да не сте наясно с други предстоящи промени в PHP, които биха повлияли на кода на приложението ви. Разбира се, възможно е само да се потискат грешките, които възникват във въпросния израз, като се използва оператор за контрол на грешки — т.е. добавяне на съответния ред с@
— това обаче ще потисне всички грешки, породени от този израз, а не само отE_DEPRECATED
такива.
Какво трябва да направите?
-
Започвате нов проект.
Няма абсолютно никаква причина да използвате
ext/mysql
—изберете едно от другите, по-модерни разширения вместо това и се възползвайте от предимствата, които предлагат. -
Имате (ваша собствена) наследена кодова база, която в момента зависи от
ext/mysql
.Би било разумно да извършите регресионно тестване:наистина не трябва да променяте нищо (особено надграждане на PHP), докато не идентифицирате всички потенциални области на въздействие, планирате около всяка една от тях и след това задълбочено тествате решението си в промежуточна среда.
-
Следвайки добрата практика на кодиране, вашето приложение е разработено по слабо интегриран/модулен начин и всички методи за достъп до базата данни са самостоятелни на едно място, което лесно може да бъде заменено с едно от новите разширения.
Прекарайте половин час, пренаписвайки този модул, за да използвате едно от другите, по-модерни разширения; тествайте обстойно. По-късно можете да въведете допълнителни подобрения, за да се възползвате от предимствата, които предлагат.
-
Методите за достъп до базата данни са разпръснати навсякъде и не могат лесно да бъдат заменени с някое от новите разширения.
Помислете дали наистина трябва да надстроите до PHP v5.5 в момента.
Трябва да започнете да планирате да замените
ext/mysql
с едно от другите, по-модерни разширения, за да можете да се възползвате от предимствата, които те предлагат; можете също да го използвате като възможност да преработите методите си за достъп до базата данни в по-модулна структура.Въпреки това, ако имате спешни трябва да надстроите PHP веднага, може да помислите за потискане на грешките при оттеглянето за момента:но първо се уверете, че сте идентифицирали всички други грешки при оттеглянето, които също се хвърлят.
-
-
Използвате проект на трета страна, който зависи от
ext/mysql
.Помислете дали наистина трябва да надстроите до PHP v5.5 в момента.
Проверете дали разработчикът е пуснал някакви поправки, заобиколни решения или насоки във връзка с този конкретен проблем; или, ако не, ги притиснете да го направят, като им обърнете внимание на този въпрос. Ако имате спешни трябва да надстроите PHP веднага, може да помислите за потискане на грешките при оттеглянето за момента:но първо се уверете, че сте идентифицирали всички други грешки при оттеглянето, които също се хвърлят.
Абсолютно важно е да се извърши регресионно тестване.