2013-07-18 2 views
5

Я хочу переключиться с MySQL на MySQLi, но у меня очень большой сайт.Переключить большой сайт с MySQL на MySQLi

Я читал, что https://wikis.oracle.com/display/mysql/Converting+to+MySQLi может мне помочь, и я прочитал How could I change this mysql to mysqli?. В нем говорится, что я мог бы заменить большинство функций, просто добавив «i» в функцию, и что я должен начать bughunting.

Но мой сайт очень сложный и большой, и для проверки, все ли работает, потребуется очень много времени. Итак: какой лучший способ переключиться с MySQL на MySQLi на очень большой сайт?

Спасибо!

+0

нет простой способ. необходимо проверить все сценарии и заменить вызовы. и тест. – Aris

+0

У вас есть тестеры? – DevZer0

+0

Каковы основные изменения? Просто параметры и имя функций? И нет, у меня не так много тестеров ... – Jordy

ответ

4

Ответ на ваш вопрос нелегко, поскольку практически каждый простой способ сделать это включает в себя разные действия, когда приложение было написано.

Если у вас есть прямые вызовы функций mysql_ * по всему вашему коду и нет уровня абстракции базы данных, где вы выполняете свои запросы через вспомогательный класс или функцию, вам нужно будет отредактировать каждую команду.

Вы не можете просто уйти с добавлением I к командам, как mysql_query, как процедурно mysqli_query() требует первый параметр, чтобы быть ссылка на БД, где с mysql_query(), если соединение было дано вообще, это был второй параметр.

Вместо того, чтобы просто менять mysql_query (...) на mysqli_query ($ link, .....), я бы рекомендовал, чтобы не было лучшего места для добавления слоя абстракции db. Поэтому используйте функции sql_query(), которые фактически обрабатывают ваши запросы, поэтому в будущем, если вам нужно снова изменить БД, вы можете просто обновить отдельные команды db в одном файле абстракции. Таким образом, если вы напишете функцию, которая обертывает mysqli_query, вы сможете просто переименовать свой mysql_query() в свою вспомогательную функцию и позволить вспомогательной функции беспокоиться о том, чтобы установить ссылку там.

Хотя это самый простой способ, это не будет связывать параметры или подготовить заявления, который является одним из основных факторов в предотвращении инъекции SQL Уязвимости

После того, как вы изменили все эти команды, необходимые для тестирования.

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

+0

Как начинающий программист с этой же задачей под рукой, я ценю разбивку на то, что должно быть сделано, но, как всегда, сжатый срок также связан, и мне не хватает времени, чтобы узнать: как работает слой абстракции; как автоматизированные тесты (очень новые для ООП). Если у вас есть хорошая документация по этому вопросу, я был бы признателен, но, скорее всего, мне придется немедленно заменить все вызовы mysql_ *. заранее спасибо –

-1

вы принимаете правильное движение, потому что функция mysql_ * устарела для последней версии php. вам необходимо скачать конвертер для этой цели ... посмотреть и скачать ... mysql to mysqli

+1

На самом деле это неправильный ход. Такая механическая замена ничего не добавит к безопасности. И OP уже имеет эту ссылку. –

Смежные вопросы