Dlaczego tak się dzieje?
Cały
ext/mysql
Rozszerzenie PHP, które udostępnia wszystkie funkcje o nazwie z przedrostkiemmysql_
, został oficjalnie przestarzały w PHP w wersji 5.5.0 i usunięte w PHP v7 .Został pierwotnie wprowadzony w PHP v2.0 (listopad 1997) dla MySQL v3.20 i od 2006 r. nie dodano żadnych nowych funkcji. W połączeniu z brakiem nowych funkcji są trudności w utrzymaniu tak starego kodu pośród złożonych luk w zabezpieczeniach.
Podręcznik zawiera ostrzeżenia przed jego użyciem w nowym kodzie od czerwca 2011 roku.
Jak mogę to naprawić?
Jak sugeruje komunikat o błędzie, istnieją dwa inne rozszerzenia MySQL, które możesz rozważyć:MySQLi i PDO_MySQL , z których każdy może być użyty zamiast
ext/mysql
. Oba są w rdzeniu PHP od wersji 5.0, więc jeśli używasz wersji, która zgłasza te błędy, możesz prawie na pewno zacząć ich używać od razu — tj. bez żadnego wysiłku instalacyjnego.Różnią się nieco, ale oferują szereg zalet w porównaniu ze starym rozszerzeniem, w tym obsługę API dla transakcji, procedur składowanych i przygotowanych instrukcji (zapewniając w ten sposób najlepszy sposób pokonać ataki wstrzykujące SQL ). Programista PHP Ulf Wendel napisał dokładne porównanie funkcje .
Hashphp.org ma doskonały samouczek dotyczący migracji z
ext/mysql
do ChNP .Rozumiem, że można pominąć błędy zaniechania, ustawiając
error_reporting
wphp.ini
aby wykluczyćE_DEPRECATED
:error_reporting = E_ALL ^ E_DEPRECATED
Co się stanie, jeśli to zrobię?
Tak, możliwe jest pominięcie takich komunikatów o błędach i kontynuowanie używania starego
ext/mysql
na razie przedłużenie. Ale naprawdę nie powinieneś tego robić —to ostatnie ostrzeżenie od programistów, że rozszerzenie może nie być dołączone do przyszłych wersji PHP (w rzeczywistości, jak już wspomniano, zostało usunięte z PHP v7). Zamiast tego skorzystaj z okazji, aby przeprowadzić migrację aplikacji teraz , zanim będzie za późno.Pamiętaj też, że ta technika wyłączy wszystkie
E_DEPRECATED
wiadomości, nie tylko te związane zext/mysql
rozszerzenie:dlatego możesz być nieświadomy innych nadchodzących zmian w PHP, które wpłyną na kod Twojej aplikacji. Możliwe jest oczywiście tylko pominięcie błędów, które pojawiają się w danym wyrażeniu za pomocą operator kontroli błędów -tj. poprzedzenie odpowiedniej linii znakiem@
—jednak spowoduje to wstrzymanie wszystkich błędy wywołane przez to wyrażenie, nie tylkoE_DEPRECATED
jedynki.
Co powinieneś zrobić?
-
Rozpoczynasz nowy projekt.
Nie ma absolutnie żadnego powodu używać
ext/mysql
—wybierz jedno z innych, bardziej nowoczesnych rozszerzeń i czerp korzyści z oferowanych przez nie korzyści. -
Masz (własną) starszą bazę kodu, która obecnie zależy od
ext/mysql
.Rozsądnie byłoby przeprowadzić testy regresji:naprawdę nie powinieneś zmieniać niczego (zwłaszcza aktualizacja PHP), dopóki nie zidentyfikujesz wszystkich potencjalnych obszarów wpływu, zaplanujesz wokół każdego z nich, a następnie dokładnie przetestujesz swoje rozwiązanie w środowisku przejściowym.
-
Postępując zgodnie z dobrą praktyką kodowania, Twoja aplikacja została opracowana w sposób luźno zintegrowany/modułowy, a wszystkie metody dostępu do bazy danych są zamknięte w jednym miejscu, które można łatwo wymienić na jedno z nowych rozszerzeń.
Poświęć pół godziny na przepisanie tego modułu, aby użyć jednego z innych, bardziej nowoczesnych rozszerzeń; dokładnie przetestuj. Możesz później wprowadzić dalsze udoskonalenia, aby czerpać korzyści z oferowanych przez nie korzyści.
-
Metody dostępu do bazy danych są rozproszone po całym miejscu i nie można ich łatwo wymienić na jedno z nowych rozszerzeń.
Zastanów się, czy naprawdę musisz w tej chwili uaktualnić do PHP v5.5.
Powinieneś zacząć planować zastąpienie
ext/mysql
z jednym z innych, bardziej nowoczesnych rozszerzeń, abyś mógł czerpać korzyści z oferowanych przez nie korzyści; możesz również użyć tego jako okazji do refaktoryzacji metod dostępu do bazy danych w bardziej modułową strukturę.Jeśli jednak masz pilne Jeśli potrzebujesz zaktualizować PHP od razu, możesz rozważyć na razie pominięcie błędów przestarzałych:ale najpierw upewnij się, że zidentyfikowałeś wszelkie inne błędy przestarzałe, które również są zgłaszane.
-
-
Korzystasz z projektu innej firmy, który zależy od
ext/mysql
.Zastanów się, czy naprawdę musisz w tej chwili uaktualnić do PHP v5.5.
Sprawdź, czy deweloper udostępnił jakieś poprawki, obejścia lub wskazówki dotyczące tego konkretnego problemu; lub, jeśli nie, naciskaj ich, aby to zrobili, zwracając im uwagę na tę sprawę. Jeśli masz pilne Jeśli potrzebujesz zaktualizować PHP od razu, możesz rozważyć na razie pominięcie błędów przestarzałych:ale najpierw upewnij się, że zidentyfikowałeś wszelkie inne błędy przestarzałe, które również są zgłaszane.
Wykonanie testów regresji jest absolutnie niezbędne.