Переключиться на MySQL или остаться с MySQL? - PullRequest
5 голосов
/ 26 августа 2011

У нас есть приложение, которое находилось в разработке (и сейчас в производстве) более года. В общей сложности более 500 mysql_* вызовов.

Стоит ли переключать все из mysql_* в коде на mysqli_*

Стоит ли преследовать все ошибки, которые могут (и, скорее всего, будут) возникать?

Я вижу по таким вопросам: Меняем ли это с MySQL на MySQLi? , что простое добавление i после каждого вызова mysql* может привести ко многим ошибкам. Это стоит моего времени?

mysql_*, вероятно, будет надолго (даже среди слухов об устаревании), так что, действительно, стоит ли программистам время на методическое переключение?

См. Также это обсуждение

Ответы [ 7 ]

4 голосов
/ 26 августа 2011

Цитирование руководства для ext/mysqli:

Расширение mysqli имеет ряд преимуществ, ключевые улучшения по сравнению с расширением mysql:

  • Объектно-ориентированный интерфейс
  • Поддержка подготовленных заявлений
  • Поддержка нескольких операторов
  • Поддержка транзакций
  • Расширенные возможности отладки
  • Поддержка встроенного сервера

Примечание. Если вы используете MySQL версии 4.1.3 или новее, настоятельно рекомендуется использовать это расширение.

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

Сноска, слухи верны. ext / mysql скорее всего устареет (хотя никто не может сказать, когда на момент написания этой статьи. Конечно, он не будет устаревшим с 5.4. В любом случае вам не следует больше запускать новые проекты с помощью ext / mysql, когда у вас есть улучшенное расширение для запуска.

Также см. http://blog.ulf -wendel.de / 2012 / php-mysql-Why-to-upgrade-extmysql /

4 голосов
/ 26 августа 2011

На мой взгляд, преимущество MySQLi заключается в том, что он используется объектно-ориентированным образом и с подготовленными инструкциями.Вы получаете дополнительную гибкость от этого, используя и процедурный стиль, например, хорошие функции-обертки для обработки транзакций, но я думаю, что этого недостаточно для оправдания, если вы не переписываете много кода, чтобы использовать их.

И есливы должны были предпринять усилия для преобразования в код OO или подготовленные операторы, вы могли бы также преобразовать в более гибкий PDO вместо MySQLi.

Обновление январь 2013

Просто нашел этот старый ответ, и в ветке комментариев за август 2011 года я сказал, что не стоит конвертировать mysql_query() вызовов в mysqli_query(), если отсутствует сопутствующий переход к подготовленным утверждениям.Теперь IS необходимо начать движение в этом направлении, поскольку расширение mysql_*() устарело с PHP 5.5 и в конечном итоге будет удалено.

1 голос
/ 26 августа 2011

Устаревание ext / mysql - это не слухи.

Однако это не ваша настоящая проблема.

Ваша основная проблема заключается в том, что вы используете голые вызовы API во всем коде, а не какую-то интеллектуальную библиотеку для обработки запросов SQL.

Итак, вам лучше начать разрабатывать такую ​​библиотеку или получить готовую, а затем переписать свой код, чтобы использовать его вызовы.

Разве вы не видите, что все эти повторяющиеся вещи

$res=mysql_query("SELECT STUFF");
while($row = mysql_fetch){
    $var=$row['col'];
}

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

$data = $db->getRow("SELECT stuff");

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

И, как побочный эффект от использования такой библиотеки, единственное место, где вам нужно будет изменитьвсе вызовы API будут только этим библиотечным кодом.

1 голос
/ 26 августа 2011

MySQLi имеет некоторые преимущества в производительности по сравнению с MySQL.На самом деле рекомендуется использовать MySQLi вместо MySQL.Вы также можете выполнять процедурный стиль.

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

0 голосов
/ 26 августа 2011

Совет: Если вы собираетесь выполнить переключение, не переключайтесь на mysqli, вместо этого переключайтесь на использование PDO. Если вам нужно переключиться на mysqli, убедитесь, что вы используете его в PHP5 OO. Не используйте mysqli OO и старый mysql одновременно или старый mysql и PDO одновременно, если вам не нравится неожиданное прерывание соединения.

0 голосов
/ 26 августа 2011

Если у вас столько вызовов, то я предлагаю вам начать с реализации (выбора или построения) уровня абстракции для вызовов базы данных, а затем преобразовать его.

Самое большое преимущество (существенное) в моем аналогеупражнение заключалось в том, что mysqli предлагает параметризованные операторы, позволяющие вам оставить позади mysql_real_escape_string и т. д.Но карта от одного к другому далеко не однозначна.

0 голосов
/ 26 августа 2011

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

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