MySQLi – новая версия расширения MySQL
Добрый день, уважаемые читатели. Сегодня я хочу вам рассказать о такой вещи, как новое расширение для работы с СУБД – MySQLi. Данное расширение существует уже на протяжении долгого времени, и несет на своем борту много полезных и новых возможностей, по сравнению со старой версией расширения – MySQL. Но по моей собранной статистике не многие разработчики используют новое расширение вместо старого.
Лично я в своих разработках, всегда использую MySQLi, так как он работает немного быстрее и безопаснее по сравнению с MySQL. Расширение MySQLi совместимо только с версиями MySQL 4.1 и выше. Для более старых версий MySQL , по-прежнему придется использовать старое расширение.
И так, в чем же отличие нового расширение от старого.
На первый взгляд расширение MySQLi очень похоже на старую версию расширения. Большинство функций, которые доступны в старом расширении, также доступны и в новом расширении. Первое отличие от MySQL это то, что немного изменились названия функций. Например, вместо функции mysql_query() старого расширения, в новом расширении используется функция mysqli_query(). Если говорить по-простому, то в названиях функций вместо слова mysql используется слово mysqli.
Так же в новом расширении исчезло такое понятие как “соединение по умолчанию”. То есть, в старом расширении, в запросах не нужно было явно указывать соединение с базой данных, но в новом расширении, теперь нужно в каждом запросе указывать идентификатор соединения с базой данных, который передается первым параметром.
Вот отличия MySQLi от MySQL.
1. Поддержка двойного синтаксиса: функциональный и объектно-ориентированный.
2. Поддержка подготовленных операторов.
3. Поддержка транзакций.
4. Поддержка множественных запросов.
5. Расширенная поддержка отладки.
6. Встроенная серверная поддержка.
Для начала я вам покажу, как подключаться к базе данных по-новому.
Синтаксис функции подключения к базе выглядит следующим образом:
параметры $port и $socket, являются необязательными.
Пример процедурного стиля:
Пример объектно-ориентированного стиля:
С переменными, которые передаются в функцию mysqli_connect, думаю вам все понятно.
Теперь посмотрим, как выполнять запросы и получать данные в каждом из стилей.
Пример процедурного стиля:
Как видно из примера в функцию mysqli_query передается идентификатор подключения $load. Ну а формат самого запроса остался без изменений.
Пример объектно-ориентированного стиля:
Как видно из примера идентификатор подключения $load в самой функции не передается, а передается только в названии функции — $load->query.
Также нужно знать, что результат запроса сохраняется в памяти до тех пор, пока скрипт выполнивший этот запрос, не завершит свою работу. Это нормально в большинстве случаев, но когда вы работаете с запросами, которые возвращают большие наборы данных, необходимо освобождать память, занимаемую результатом запроса. Для этого в MySQLi существует функция – mysqli_free_result().
Пример использования этой функции в процедурном стиле:
Пример использования этой функции в объектно-ориентированном стиле:
Вот в принципе все основные моменты работы с MySQLi. В следующих постах я буду подробнее рассматривать каждую из функций.
Подводя итоги, хочется сказать, что стабильность у MySQLi стала выше в разы по сравнению с MySQL, так как появилась возможность использовать транзакции. Хотя транзакции были и MySQL, но работы с ними стала возможной только в MySQLi. Также работа с подготовленными операторами дала возможность обезопасить свои данные от SQL – инъекций. На счет быстродействия, я тестировал web приложения на двух расширениях, выигрыш у MySQLi не очень велик, но при большом объеме данных , с которыми придется работать, выигрыш будет заметен.
MySQL против MySQLi
MySQL против MySQLi — это системы управления реляционными базами данных. Напомним, что реляционная СУБД смоделирована на объектах, которые представляют реальные отношения. Данные хранятся в табличном формате и связаны с другими данными посредством нормализации и ограничений.
MySQL — MySQL — это система управления реляционными базами данных с открытым исходным кодом. Это наиболее широко используемая система управления базами данных. Некоторые тяжелые имена приложений включают Facebook, Twitter, YouTube и т. Д. Это процедурный подход.
MySQLi — MySQLi — это драйвер реляционной базы данных для обеспечения интерфейса с базами данных MySQL. Буква i в MySQLi означает улучшенный. В основном используется в скриптовом языке PHP. Это объектно-ориентированный подход.
Сравнение лицом к лицу между MySQL и MySQLi
Ниже приведены 9 основных отличий между MySQL и MySQLi:
Ключевые различия между MySQL и MySQLi
Давайте обсудим некоторые основные различия между MySQL и MySQLi.
- По сути, MySQLi не является базой данных. Это улучшенный интерфейс для доступа к функциональности, предоставляемой базой данных MySQL. Этот улучшенный интерфейс облегчает задачу разработчиков.
- Еще одним преимуществом MySQLi является объектно-ориентированная поддержка базовой базы данных MySQL. Это помогает программистам создавать объекты подключения и выполнять все задачи с помощью методов в классе объекта подключения. В то же время, для приложений, где запросы к базе данных являются простыми операциями CRUD, MySQL работает так же хорошо, как MySQLi.
- Что касается безопасности, MySQLi имеет механизм предотвращения атак SQL-инъекций. Кроме того, MySQLi имеет поддержку всех функций MySQL с дополнительным преимуществом API. API дают MySQLi преимущество над MySQL. Разработчикам часто проще использовать API, а не формулировать собственные запросы для избыточных задач. Чтобы добавить к этому, отличная языковая совместимость и поддержка сообщества также мотивируют программистов PHP использовать MySQLi поверх MySQL.
MySQL против MySQLi Сравнительная таблица
Давайте обсудим самые лучшие сравнения между MySQL и MySQLi.
Основа сравнения MySQL против MySQLi | MySQL | MySQLi |
СУБД | Да — MySQL — это полноценная система управления реляционными базами данных. | Нет — MySQLi является расширением интерфейса, предоставляемого MySQL. Он использует базы данных MySQL в базовой архитектуре. |
Парадигма программирования | Процедурный — MySQL имеет процедурный подход к запросам к базе данных. Объект результата запроса рассматривается как шаг в процедуре. | Двойной (процедурный и объектно-ориентированный) — MySQLi имеет двойной подход. Для пользователей, переходящих с интерфейса MySQL, есть поддержка процедурного подхода. Однако вы можете свободно выбирать объектно-ориентированный подход. В объектно-ориентированном подходе акцент делается на объекте результата. Каждый шаг вращается вокруг объекта соединения MySQLi. Функции сгруппированы вокруг объекта по назначению. Тем не менее, нет существенной разницы в производительности между обоими подходами. Вы можете выбрать интерфейс, который вам удобен. |
Интерфейс | Интерфейс командной строки — MySQL поставляется с интерфейсом командной строки. Это похоже на консоль DOS. Инструкции SQL представлены в виде команд, а результаты отображаются в виде таблицы в самой консоли. | Графический / программный интерфейс — MySQLi имеет графический интерфейс с базовыми базами данных MySQL. Вы можете давать определенные команды нажатием кнопки, и результаты отображаются на отдельной странице результатов. Существует также программный интерфейс, где вы можете кодировать команды, используя открытые API. |
Написано на языке | C и C ++ — MySQL был написан на языках C и C ++. | PHP — MySQLi написан на PHP и в основном используется только на языке сценариев PHP. |
SQL-инъекция | Склонность к атакам SQL-инъекций. MySQL неоднократно подвергался атакам SQL-инъекций. Хакер вводит вредоносный запрос в поля ввода пользователя, который исполняется на сервере. Это приводит к компрометации безопасности данных. | Предотвращает SQL-инъекции — MySQLi имеет механизмы предотвращения атак SQL-инъекций. Когда запрос SQL отправляется через поле ввода пользователя, MySQLi возвращает ошибку и не выполняет запрос. |
Поддержка транзакций | ACID-транзакции — движок MySQL InnoDB полностью поддерживает ACID-транзакции. ACID-свойства транзакции обозначают атомарность, согласованность, изоляцию и долговечность. Это гарантирует, что транзакции точны, завершаются каждый раз, и целостность данных не подвергается риску. | Поддержка API для транзакций MySQL — MySQLi обеспечивает поддержку API для базовых транзакций MySQL. По сути это означает, что транзакциями в MySQLi можно управлять с помощью вызовов API. Существуют API для включения или отключения режима автоматической фиксации, фиксации транзакции или отката транзакции. |
Поддержка нескольких операторов | MySQL позволяет отправлять несколько операторов на сервер одновременно для выполнения. Это экономит время прохождения сигнала от клиента до сервера. Все наборы результатов, возвращаемые с сервера, должны быть использованы клиентом. | Да — MySQLi поддерживает несколько операторов в базовой базе данных MySQL. Эта поддержка обеспечивается с помощью метода multi_query объекта соединения MySQLi. |
Поддержка подготовленного заявления | База данных MySQL подготовила заявления. Подготовленный оператор используется для многократного выполнения одного и того же запроса с более высокой эффективностью. Подготовленное заявление имеет два этапа — подготовить и выполнить. Когда инструкция подготовлена, сервер выполняет ее компиляцию, подготавливает шаблон инструкции и выделяет необходимые ресурсы. На этапе выполнения клиент отправляет фактические параметры на сервер, а сервер выполняет предварительно подготовленный шаблон со значениями параметров и выделенными ресурсами. Таким образом, оператор может быть выполнен несколько раз с более высокой эффективностью. | Да — MySQLi поддерживает подготовленные операторы в базовой базе данных MySQL. Эта поддержка обеспечивается с помощью методов prepare, bind_param и execute объекта соединения MySQLi. |
Выпущенный | 23 мая 1995 г. | Выпущено в нескольких пакетах в 2004-05 гг. |
Вывод
MySQLi — определенно улучшенная версия MySQL. Но выбор зависит от вашего технологического стека. PHP имеет отличную поддержку MySQLi, но то же самое не относится к другим языкам. Если ваше приложение является частью стека LAMP (Linux, Apache, MySQL, Perl / Python / PHP), вам лучше использовать MySQL. Это потому, что MySQL имеет отличную поддержку сообщества для проблем, возникающих из-за архитектуры LAMP. Так что выбирайте мудро и продолжайте учиться.
Рекомендуемые статьи
Это было руководство по MySQL против MySQLi. Здесь мы также обсудим ключевые отличия MySQL от MySQLi с помощью инфографики и сравнительной таблицы. Вы также можете просмотреть наши другие предлагаемые статьи, чтобы узнать больше —
MySQL vs MySQLi при использовании PHP [закрыто]
Что лучше, MySQL или MySQLi? И почему? Что я должен использовать?
Я имею в виду лучше не только с точки зрения производительности, но и любой другой соответствующей функции.
6 ответов:
- объектно-ориентированный интерфейс
- поддержка подготовленных заявлений
- поддержка нескольких заявлений
- сопровождение сделок
- расширенные возможности отладки
- встроенный сервер поддержка.
на странице также есть матрица функций, сравнивающая API расширения. Основные различия между mysqli и mysql API заключаются в следующем следует:
существует дополнительная матрица функций, сравнивающая библиотеки (новый mysqlnd против libmysql) в
и очень тщательная статья в блоге на
Я отказался от использования mysqli. Он просто слишком нестабилен. У меня были запросы, которые разбивают PHP с помощью mysqli, но отлично работают с пакетом mysql. Также mysqli падает на столбцы LONGTEXT. Эта ошибка была поднята в различных формах, по крайней мере, с 2005 года и остается сломанным. Я бы честно хотел использовать подготовленные заявления, но mysqli просто недостаточно надежен (и никто, похоже, не беспокоится об этом). Если вы действительно хотите подготовленные заявления идут с ПДО.
MySQLi расшифровывается как MySQL improved. Это объектно-ориентированный интерфейс к привязкам MySQL,который упрощает использование. Он также предлагает поддержку подготовленных заявлений (которые очень полезно). Если вы находитесь на PHP 5, Используйте MySQLi.
Что лучше PDO; это менее жестокий интерфейс, а также предоставляет те же функции, что и MySQLi.
использование подготовленных операторов хорошо, потому что это исключает возможности SQL-инъекции; использование подготовленных операторов на стороне сервера плохо, потому что это увеличивает количество обходов.
для меня подготовленные заявления-это обязательная функция. точнее, привязка параметров (которая работает только с подготовленными операторами). это единственный действительно разумный способ вставить строки в команды SQL. я действительно не доверяю функциям «побега». соединение с БД является двоичным протоколом, зачем использовать ASCII-ограниченный субпротокол для параметров?
MySQL и MySQLi
MySQL — это система управления реляционными базами данных (или РСУБД), которая понимает, что это система управления базами данных, основанная на реляционной модели. Этот RDMS работает как собственный сервер и обеспечивает многопользовательский доступ к нескольким базам данных одновременно. Исходный код MySQL доступен в соответствии с условиями, изложенными в GNU General Public License, а также с множеством патентованных соглашений. Члены сообщества MySQL создали множество различных разделов RDMS — самыми популярными из которых являются Drizzle и MariaDB. В качестве прототипа нескольких филиалов большинство бесплатных программных проектов, которые должны иметь полнофункциональную систему управления базами данных (или DMS), используют MySQL.
MySQLi Extension (или просто известный как MySQL Improved или MySQLi) является реляционным драйвером базы данных, который используется в основном на языке программирования PHP. Он обеспечивает интерфейс с уже созданными базами данных MySQL. Это буквально улучшенная версия своего предшественника MySQL, которая была просто средством управления базами данных по серверам.
MySQL можно найти во многих веб-приложениях в качестве компонента базы данных пакета программных пакетов (или LAMP). Его использование можно широко увидеть на таких популярных веб-сайтах, как Flickr, FaceBook, Wikipedia, Google, Nokia и YouTube. На каждом из этих сайтов используется MySQL для хранения и регистрации пользовательских данных. Код состоит из языков C и C ++ и использует множество различных системных платформ, включая Linux, Mac OS X и Microsoft Windows.
Расширение MySQLi оснащено многими преимуществами, которые дополняют, а также улучшают те, которые были предоставлены его предшественником MySQL. Есть несколько, которые более заметны, чем другие. Эти функции, которые призваны улучшить функциональность MySQL (а также обеспечить обновление для менеджера баз данных в целом), — это объектно-ориентированный интерфейс, поддержка заявлений, которые были предварительно подготовлены, поддержка различных операторов, поддержка для любой транзакции, которая имеет место, расширенный уровень поддержки отладки и повышенный уровень поддержки сервера, который уже встроен в инфраструктуру базы данных.
В качестве СУБД не требуется, чтобы MySQL поставлялся с инструментами GUI для администрирования баз данных или управления данными в нем. Пользователи могут использовать инструмент командной строки или загружать MySQL Frontends из разных сторон, у которых есть необходимое программное обеспечение и веб-приложения для управления базами данных, создания баз данных и работы с записями данных.
1. MySQL — это RDBMS, которая работает как сервер и обеспечивает многопользовательский доступ к нескольким базам данных; MySQLi — это расширение MySQL.
2. MySQL не нуждается в инструментах GUI для администрирования баз данных или управления данными в нем; MySQLi основывается на функциях MySQL и включает в себя объектно-ориентированный интерфейс, поддержку ранее подготовленных операторов и расширенную поддержку встроенного сервера.