Что лучше, MySQL или MySQLi? И почему? Что я должен использовать?
Я имею в виду лучше не только с точки зрения производительности, но и с любой другой соответствующей функцией.
Что лучше, 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 для параметров?