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

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

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

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

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

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

Существует справочная страница, посвященная выбору между mysql, mysqli и 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 versus libmysql) в

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

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

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

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

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

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