Устаревшее расширение MySQL в PHP 5.5.x

Согласно руководству PHP и множеству источников в Интернете по версии PHP 5.5.x, все оригинальное расширение MySQL устарело. У меня действительно надежное веб-приложение, которое используется многими учениками в моей ассоциации, но я начал работать над этим, когда я не знал много PHP, и я никогда не беспокоился об изменении расширения MySQL_ * с MySQLi_ * или PDO_MySQL ,

Веб-приложение завершено, и все системы запущены и, вероятно, не будут улучшены новыми функциями, поэтому мой вопрос: должен ли я потратить некоторое время и изменить все вызовы mysql_ * и переключить их с помощью вызовов mysqli_ *. Мое приложение когда-либо станет недоступным в Интернете, если я оставлю все с устаревшим расширением mysql_ *?

Мое приложение когда-либо станет недоступным в Интернете, если я оставлю все с устаревшим расширением mysql_ *?

Ваше приложение будет разорваться только тогда, когда и когда сервер, на котором он запущен, обновлен до версии PHP, которая не поддерживает старый API. Если ваш сервер не обновляется до версии PHP 5.5, ваше приложение будет продолжать работать, как и на неопределенный срок. Ничто другое из внешнего Интернета не повлияет на это в этом отношении; важны только обновления на ваш собственный сервер.

На данный момент php 5.4 по-прежнему активно поддерживается, поэтому вы можете с радостью остановиться на этой версии, не беспокоясь о внезапном нарушении вашего кода.

Однако в какой-то момент в будущем по той или иной причине вам нужно будет перейти на PHP 5.5 или выше. PHP 5.4 станет последним, и рекомендуется перейти к 5.5. Или, если вы используете учетную запись с общим хостингом, у вас может даже не быть выбора по вашей версии PHP. Так что да, вы должны ожидать, что ваш текущий код не будет работать с версией PHP, которую вы используете в то время. В итоге.

Поэтому, пока нет необходимости немедленно переключаться, вы должны сделать это как можно скорее. Одна вещь, которую вы не хотите, – это тот день, когда все ломается, и вы обнаружите, что поймали.

5.5 только что был выпущен, поэтому у вас, вероятно, есть несколько лет, прежде чем он станет самой низкой доступной версией, но примите мои советы; вы не хотите ждать до последнего момента.

Должен ли я занять некоторое время и изменить все вызовы mysql_ * и переключить их с помощью вызовов mysqli_ *.

Вы заявили, что ваше приложение «действительно надежное» и «вероятно, не будет улучшено». Таким образом, это в основном в долгосрочной перспективе.

Учитывая эти критерии, я бы сказал, что да, простой переход к mysqli lib – это разумный ход. Необходимые изменения довольно тривиальны (похоже, что у вас есть ручка о том, что делать уже), и не должно иметь никакого никакого влияния на остальную часть программного обеспечения.

Если ваш код действительно надежный и хорошо написанный, он будет структурирован таким образом, чтобы существовал какой-то уровень базы данных, что будет означать, что вам все равно нечего делать.

Если это не так хорошо структурировано, у него может быть много mysql_query() разбросанных по всему коду, и в этом случае может потребоваться немного больше работы. В этом случае, поскольку вы все равно работаете над кодом, вы можете подумать о том, чтобы потратить немного времени на реструктуризацию. Создайте слой базы данных. Возможно, начните использовать подготовленные заявления. Я бы также рекомендовал переключиться на PDO, а не на mysqli . Но ваш звонок – учитывая то, что вы сказали в вопросе, было бы понятно, если бы вы хотели сделать минимальный объем работы.

Кстати, если вы еще этого не сделали, вы также можете прочитать следующее: Почему я не должен использовать функции mysql_ * в PHP?

Да, приложение будет недоступным, если ваш веб-хостинг будет обновлен до версии PHP, где расширение будет удалено. Обратите внимание, что это не произойдет в PHP 5.5, где расширение «только» отмечено как устаревшее. Точно, когда расширение будет удалено, будет неизвестен afaik atm.

Что касается вопроса обновления: это действительно зависит, ожидаете ли вы, что ваше приложение выйдет из-под контроля mysql_ *? Часто ли ваш веб-узел часто обновляет PHP? Если они медленны с обновлениями, вы можете запустить приложение в течение многих лет.

Производительность / безопасность было бы предпочтительнее изменить подготовленные заявления.

Вопрос, который вы должны задать себе:

 "How long before I am forced to move to a version of PHP that no longer supports mysql_*?" 

Если вы никогда не обновляете свой PHP, вам совсем не нужно менять код. (Пожалуйста, не кричите на меня, пока ребята)

Однако некоторое время в будущем вам придется перейти на новый уровень PHP

Вы, интернет-провайдер или администратор сети, настаиваете на том, что версия PHP, на которую вы застряли, является старой и небезопасной для работы в сети.

Итак, честный ответ: вам не нужно делать это в пятницу, но когда этот администратор настаивает на удалении вашей версии PHP, вам придется это делать когда-нибудь. Поэтому, когда у вас есть время, ЭТО.

Должен ли я занять некоторое время и изменить все вызовы mysql_ * и переключить их с помощью вызовов mysqli_ *.

Нет, нет и нет.

  • Если вы хотите улучшить свое приложение, ознакомьтесь с каким-то ORM или построителем запросов или, по крайней мере, DAL, например PDO или safeMysql .
  • Если вы хотите, чтобы ваше приложение продолжало идти, просто держите его как есть. У вас еще нет 5.5 на ваших серверах, не так ли? Когда вы его получите, вы сможете отключить уведомления об устаревших уровнях. Не лучший подход, но дешевый и удобный.

При смене вызова mysql на mysqli механически не будет ничего хорошего.

Мое приложение когда-либо станет недоступным в Интернете, если я оставлю все с устаревшим расширением mysql_ *?

На самом деле я не могу получить то, что вы здесь задаете, но я бы сказал, что у вас есть как минимум 5 лет вперед.

Да, вы должны позаботиться о том, чтобы обновить свой код для работы с mysqli или PDO.

Причина заставляет не только в mysql_ * быть недоступным в будущих версиях PHP. Но и в вашей безопасности.

mysql_ * не поддерживает подготовленные операторы / параметризованные заявления, которые охватывают защиту sql. Вы можете использовать mysql_real_escape_string (), но даже это не безупречно при работе с символами MultiByte.

См. Также: https://security.stackexchange.com/questions/8028/does-mysql-escape-string-have-any-security-vulnerabilities-if-all-tables-using-l и https://stackoverflow.com / а / 12118602/1209443