Intereting Posts
Загрузите верхний и нижний колонтитулы из модуля в Laravel Yii2 фреймворк facebook и google логин с использованием authclient не работает PHPExcel получает имя столбца относительно заданного столбца glob php – возвращает все типы изображений из каталога Отдельные файлы и каталоги в PHP Какая хорошая стратегия для возобновления истечения срока действия бланка auth ticket между .net и php? подсчитывать строки в таблице со многими различными параметрами Вызов функции PHP каждую секунду Есть ли способ создать отдельные вкладки YouTube для каждого видео в списке воспроизведения YouTube? как добавить арабские буквы в url regex как изменить этот мод, переписать в URL-адрес, который я хочу? Отправка правильного размера файла с помощью скрипта загрузки PHP Есть что-то вроде Cythype Python для PHP? Доступ к библиотекам без необходимости писать расширение? предотвратить кнопку возврата после выхода из системы как узнать, заканчивается ли строка $ с помощью ','?

Переключиться на mysqli или остаться с mysql?

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

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

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

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

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

См. Также эту дискуссию

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

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

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

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

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

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

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

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

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

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

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

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

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

Отказ от ext / mysql – это не слухи.

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

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

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

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

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

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

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

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

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

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

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

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

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