Расширение mysql устарело и будет удалено в будущем: вместо этого используйте mysqli или PDO [дубликат]
этот вопрос уже есть ответ здесь:
Почему я не должен использовать функции mysql_* в PHP?
14 ответов
когда я пытаюсь подключиться к серверу MySQL с PHP, я вижу следующую ошибку:
Deprecated: расширение mysql является устаревшим и будет удалено в будущем: используйте mysqli или PDO вместо этого /путь/имя_файла.php on line 123
код в указанной строке:
mysql_connect($server, $username, $password);
Я уверен, что аргументы верны, и этот точный код работает в течение многих лет без проблем. Действительно, я получил его из хорошо подготовленного учебника по PHP.
почему это происходит?
как я могу это исправить?
Я понимаю, что это возможно, чтобы подавить ошибки, об устаревании установив
error_reportingнаphp.iniисключитьE_DEPRECATED:
error_reporting = E_ALL ^ E_DEPRECATED
что произойдет, если я это сделаю?
1 ответ:
почему это происходит?
весь
ext/mysqlPHP расширение, которое предоставляет все функции, названные с префиксом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в PDO.я понимаю, что можно подавить ошибки устаревания, установив
error_reportingнаphp.iniисключитьE_DEPRECATED:error_reporting = E_ALL ^ E_DEPRECATEDчто произойдет, если я это сделаю?
да, можно подавить такие сообщения об ошибках и продолжить использование старый
ext/mysqlрасширение на данный момент. Но вы действительно не должны делать этого - это последнее предупреждение от разработчиков, что расширение не может быть в комплекте с будущими версиями PHP (действительно, как уже упоминалось, оно было удалено из PHP v7). Вместо этого вы должны воспользоваться этой возможностью для переноса вашего приложения теперь, пока не стало слишком поздно.обратите внимание также, что этот метод будет подавлять все
E_DEPRECATEDсообщения, не только те, что делают сext/mysqlрасширение: поэтому вы можете не знать о других предстоящих изменениях в PHP, которые повлияют на ваш код приложения. Конечно, можно только подавлять ошибки, возникающие в рассматриваемом выражении, используя PHP оператор контроля ошибок - т. е. добавление соответствующей строки с@-однако это будет подавлять все ошибки, вызванные этим выражением, а не толькоE_DEPRECATEDте.
что нужно делать?
вы начинаете новый проект.
здесь абсолютно без причины использовать
ext/mysql-выбрать один из других, более современных, расширения и пожинайте плоды преимуществ, которые они предлагают.у вас есть (ваша собственная) устаревшая кодовая база, которая в настоящее время зависит от
ext/mysql.было бы разумно выполнить регрессионное тестирование: вы действительно не должны быть изменения что-нибудь (особенно обновление PHP), пока вы не определили все потенциальные области воздействия, запланированные вокруг каждого из них, а затем тщательно протестировали свое решение в промежуточной среде.
после хорошей практики кодирвоания, ваше применение было начато в свободно интегрированном / модульном способе и все методы доступа к базе данных являются автономными в одном месте, которые могут быть легко заменены на одно из новых расширений.
потратьте полчаса на переписывание этого модуля, чтобы использовать одно из других, более современных расширений; тщательно протестируйте. Впоследствии можно ввести дополнительные уточнения, чтобы пожинать плоды преимуществ, которые они предлагают.
методы доступа к базе данных разбросаны повсюду и не могут быть легко заменены на одно из новых расширений.
подумайте, действительно ли вам нужно перейти на PHP v5.5 в это время.
вы должны начать планировать замену
ext/mysqlС одним из других, более современных, расширений, чтобы вы могли пожинать плоды преимуществ, которые они предлагают; вы также можете использовать его как возможность рефакторинга методов доступа к базе данных в более модульную структуру.однако, если у вас есть срочно нужно обновите PHP сразу же, вы можете рассмотреть возможность подавления ошибок устаревания на данный момент: но сначала обязательно определите любые другие ошибки устаревания, которые также выбрасываются.
вы используете сторонний проект, который зависит от
ext/mysql.подумайте, действительно ли вам нужно перейти на PHP v5.5 в это время.
Проверьте, выпустил ли разработчик какие-либо исправления, обходные пути или руководство в связи с этим конкретным вопросом; или, если нет, оказать на них давление, доведя этот вопрос до их сведения. Если у вас есть срочно необходимо обновить PHP сразу, вы можете рассмотреть вопрос о подавлении ошибок устаревания на данный момент: но сначала убедитесь, что вы идентифицируете любые другие ошибки устаревания, которые также выбрасываются.
абсолютно необходимо выполнить регрессионное тестирование.
Comments