MySQL против MySQLi при использовании PHP [закрыто]


167

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

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

Ответы:


111

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

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

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

1
да, самое лучшее, что mysqli поддерживает готовые заявления
jondinham

7
Также следует отметить, что MySQLi работает только с MySQL 5+. Это больше не актуально, но когда вышел MySQLi, MySQL 4 все еще оставался стандартом. Это одна из причин, по которой расширения являются отдельными, старый драйвер MySQL остается там для целей совместимости.
zneak

6
Стоит отметить, что за шесть лет многое изменилось. mysql_*()сейчас устарела и будет удалена в ближайшее время. Вы не должны использовать его для нового кода.

Что мы должны выбрать с меньшим количеством процессора и оперативной памяти?
Махди Джазини

1
Смотрите ответ Гордона ниже. Старое расширение mysql больше не поддерживается, поэтому вам все равно будет лучше использовать расширение mysqli.
Марк Дэвидсон

70

На странице руководства, посвященной выбору между 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) в

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


15

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


2
PDO тоже не совсем идеален (я столкнулся с некоторыми неприятными coredumps с ним), но, по крайней мере, он имеет более широкую базу пользователей, так что это, вероятно, более безопасная ставка.
troelskn

@troelskn, так что, разве обычный mysql не лучше?
Пейсер

@Pacerier Учитывая, что это устарело, я бы сказал, нет. В общем, кажется, что PDO стали стандартным выбором.
troelskn

@troelskn, но устарела ничего не значит, кроме того, что его не будет в будущих версиях. С точки зрения стабильности, не является ли обычный MySQL стабильнее?
Pacerier

1
В этот момент (5.5) PHP будет активно выдавать предупреждения, если вы его используете: php.net/manual/en/migration55.deprecated.php
troelskn

13

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


5

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

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


3

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


1
PDO обычно использует подготовленные операторы на стороне клиента, поэтому они на самом деле не подготовлены на сервере - но это хорошо, так как экономит ресурсы сервера и обычно работает лучше. Готовое утверждение «эмуляция» всегда будет правильно избегать вещей.
MarkR

1
«всегда» и «убегать» - опасные слова, когда идут вместе. я не знаю, может быть, этот код не содержит ошибок; но зачем, если настоящий бинарный протокол доступен? Что касается производительности, это открыто для сравнительного анализа.
Хавьер
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.