MySQL против MySQLi при использовании PHP

Что лучше, MySQL или MySQLi? И почему? Какой я должен использовать?

Я имею в виду лучше не только с точки зрения производительности, но и любой другой соответствующей функции.

6 ответов

Решение

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

Основные полезные функции:

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

На странице руководства, посвященной выбору между MySQL, MySQL и PDO,

Команда PHP рекомендует mysqli или PDO_MySQL для новой разработки:

Рекомендуется использовать расширения mysqli или PDO_MySQL. Не рекомендуется использовать старое расширение mysql для новой разработки. Подробная матрица сравнения характеристик приведена ниже. Общая производительность всех трех расширений считается примерно одинаковой. Хотя производительность расширения составляет лишь небольшую часть общего времени выполнения веб-запроса PHP. Часто воздействие составляет всего 0,1%.

На странице также есть матрица функций, сравнивающая API расширения. Основные различия между mysqli и mysql API заключаются в следующем:

                               mysqli     mysql
Development Status             Active     Maintenance only
Lifecycle                      Active     Long Term Deprecation Announced*
Recommended                    Yes        No
OOP API                        Yes        No
Asynchronous Queries           Yes        No
Server-Side Prep. Statements   Yes        No
Stored Procedures              Yes        No
Multiple Statements            Yes        No
Transactions                   Yes        No
MySQL 5.1+ functionality       Yes        No

* http://news.php.net/php.internals/53799

Существует дополнительная функциональная матрица, сравнивающая библиотеки (новый mysqlnd против libmysql) в

и очень тщательная статья в блоге

Я отказался от использования MySQL. Это просто слишком нестабильно. У меня были запросы, которые приводили к краху PHP с использованием mysqli, но прекрасно работали с пакетом mysql. Также mysqli падает на столбцах LONGTEXT. Эта ошибка была поднята в различных формах, по крайней мере, с 2005 года и остается сломанной. Честно говоря, я хотел бы использовать подготовленные утверждения, но mysqli просто недостаточно надежен (и, похоже, никто не пытается его исправить). Если вы действительно хотите, чтобы подготовленные заявления шли с PDO.

MySQLi расшифровывается как MySQL. Это объектно-ориентированный интерфейс для привязок MySQL, который упрощает использование. Он также предлагает поддержку подготовленных заявлений (которые очень полезны). Если вы используете PHP 5, используйте MySQLi.

Что лучше, так это PDO; это менее гибкий интерфейс, а также предоставляет те же функции, что и MySQLi.

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

Для меня готовые заявления - обязательная особенность. точнее, привязка параметров (которая работает только для подготовленных операторов). это единственный действительно разумный способ вставлять строки в команды SQL. я действительно не доверяю "экранирующим" функциям. соединение с БД - это двоичный протокол, зачем использовать ограниченный ASCII-протокол для параметров?

Другие вопросы по тегам