Введение в работу с MySQL в PHP
Как правило, в качестве хранилища данных используются базы данных. PHP позволяет использовать различные системы управления базами данных, но наиболее популярной на сегодняшний день в связке с PHP является СУБД MySQL.
MySQL бесплатную систему управления базами данных, которая разрабатывается компанией Oracle и которая позволяет взаимодействовать с базой данных с помощью команд языка SQL. MySQL относительно легко устанавливать и настраивать. Более того эта СУБД может работать на всех популярных ОС — на Windows, MacOS, Linux. MySQL вполне подходит как для маленьких, так и для больших проектов.
Сам процесс установки и конфигурации MySQL можно посмотреть в соответствующем руководстве — Руководство по MySQL. В данном случае мы будем рассматривать только взаимодействие PHP с MySQL.
Формально есть два способа для подключения к MySQL из PHP:
- Библиотека MySQLi (Improved MySQL)
- Библиотека PDO (PHP Data Objects)
Преимуществом pdo является то, что оно позволяет работать не только с mysql, но и с еще рядом систем баз данных — Firebird, PostreSQL, SQLite, Oracle, MS SQL Server и т.д. С помощью PDO можно использовать общий подход для подключения к поддерживаемым системам баз данных, где часто достаточно изменить строку подключения, что естественно добавляет гибкости. Также особенностью PDO является то, что эта библиотека представляет объектно-ориентированный подход для работы с базами данных.
Расширение MySQLi ограничено только одной СУБД — MySQL. MySQLi предоставляет два способа взаимодействия с базами данных: объектно-ориентированный и процедурный. К преимуществам MySQLi нередко относят то, что она больше ориентирована на специфику MySQL, специфичные для этой СУБД возможности и быстрее применяет новвоведения, которая появляются с новыми выпусками MySQL. Кроме того, также в качестве преимущества MySQLi нередко заявляют о большей производительности и скорости по сравнению с PDO.
Как бы то ни было, в настоящее время распространены оба подхода. Поэтому далее мы рассмотрим, как работать с MySQL как через PDO, так и через MySQLi.
Обе библиотеки — и mysqli и pdo_mysql по умолчанию включены в базовый комплект PHP. И нам только надо немного изменить файл конфигурации php.ini , чтобы начать работу с этими библиотеками.
Подключение mysqli
Чтобы использовать библиотеку mysqli для работы с MySQL, нам надо указать соответствующее расширение в файле php.ini . По умолчанию оно уже имеется в файле, только оно закомментировано. Так, найдем в файле php.ini следующую строку:
;extension=mysqli
Раскомментируем ее, убрав знак точки с запятой:
extension=mysqli
Подключение pdo_mysql
Чтобы использовать библиотеку pdo_mysql найдеем в файле php.ini следующую строку:
;extension=pdo_mysql
Раскомментируем ее, убрав точку с запятой:
extension=pdo_mysql
Теперь мы можем использовать оба расширения для работы с базой данных MySQL.
Что лучше: mysql или mysqli или pdo (а также mysqli_real_escape_string или mysqli_prepare)?
Использоваться будет MySQL и вряд ли когда-либо будет переход на другую базу данных.
mysql — устарел и не поддерживается;
mysqli — как я понял, рекомендуется разработчиками php;
pdo — по различным данным, немного медленнее mysqli, но есть свои плюсы, именованные плейсхолдеры, смена типа БД и др.
Я остановился на mysqli, но тут другой вопрос, что лучше использовать, по старинке mysqli_query+mysqli_real_escape_string или mysqli_prepare+mysqli_stmt_bind_param+mysqli_stmt_execute и т.д.
С точки зрения безопасности, конечно второй вариант лучше, но и первый, если быть внимательным, тоже не уступает в безопасности, зато, как я понял, экономится один запрос в базу данных (PREPARE).
Я делал тесты производительности с повтором одних и тех же запросов 50 раз, в запросе с limit 20 получаются результаты ~0.026 и ~0.032 соответственно, выиграл 1 вариант.
А с limit 200 получилось ~0.110 и ~0.100 соответственно, выиграл 2 вариант.
Запросов с малым количеством строк для вывода будет меньше, то есть получается 1 вариант, предпочтительнее. Выслушаю различные мнения. Спасибо!
- Вопрос задан более трёх лет назад
- 15916 просмотров
Почему MySQLi лучше MySQL?
PHP и MySQL разработчики сталкиваются с тремя PHP и API-интерфейсами для MySQL. Это может сбить с толку начинающего программиста. С середины 2012 года разработчики PHP предлагают не использовать старое PHP MySQL расширение, чтобы исправить ситуацию. Всем, активно занимающимся разработкой программного обеспечения и сайтов, просто жизненно необходимо заменить обычный MySQL на MySQLi или PDO_MySQL. Почему же MySqli лучше MySQL? Именно об этом и поговорим ниже в данной статье.
История и особенности
PHP и MySQL идут рука об руку. Оригинальный MySQL API разрабатываются примерно с PHP 2.0. Многие веб-сайты до сих пор могут служить примерами работы оригинального MySQL API. Это удивительно, учитывая сравнение функциональности трех API, PHP MySQL.
| Сравнительная характеристика по API | |||
|---|---|---|---|
| ext/mysqli | PDO_MySQL | ext/mysql | |
| PHP версия введена | 5.0 | 5.1 | 2.0 |
| Год ввода | 2003 | 2005 | Прошлый век |
| В комплекте с PHP 5.х | Да | Да | Да |
| Состояние разdития | Активно | Активно | Только поддержка |
| Добавление функций | Все новое, флагманское |
Все новое, учитывая, что подходит для PDO |
Ничего нового с 2006 |
| Жизненный цикл | Активно | Активно | Объявлено продолжительное устаревание |
| Рекомендация для новых проектов | Да | Да | Нет |
| ООП интерфейс | Да | Да | Нет |
| Процедурный интерфейс | Да | Нет | Да |
| API поддерживает неблокирующие, асинхронные запросы с mysqlnd | Да | Нет | Нет |
| Постоянные соединения | Да | Да | Да |
| API поддерживает кодировки | Да | Да | Да |
| API поддерживает подготавливаемые запросы на стороне сервера | Да | Да | Нет |
| API поддерживает подготавливаемые запросы на стороне клиента | Нет | Да | Нет |
| API поддерживает хранимые процедуры | Да | Да | Нет |
| API поддерживает несколько инструкций | Да | Большинство | Нет |
| AAPI поддерживает транзакции | Да | Да | Нет |
| Транзакциями можно управлять с помощью SQL | Да | Да | Да |
| API поддерживает протокол SSL | Да | Да | Нет |
| API поддерживает сжатие | Да | Да | Да |
| Поддерживает всю функциональность MySQL 5.1 | Да | Большинство | Нет |
Программные особенности
Список программных особенностей.
| ext/mysqli | PDO_MySQL | ext/mysql | |
|---|---|---|---|
| Производительность | тенденция выше среднего | средняя | ниже среднего |
| Фактор безопасности | хорошо | хорошо | ниже среднего |
| Возможность пропустить ошибку | низкая | средняя | выше среднего |
Вопросы производительности
Все три PHP API для MySQL-это крошечные обертки над C вокруг базовой библиотеки C клиент-сервер. Это библиотека, лежащая в основе клиент-сервер C, который делает большую часть работы. При одной и той же команде, выполненной с использованием одной и той же функции можно ожидать, что все интерфейсы API, покажут одинаковую производительность. Различные же функции имеют разные характеристики.
Безопасность: Шифрование/SSL
MySQL поддерживает безопасные соединения между клиентами и клиентами MySQL и сервером с использованием протокола Secure Sockets Layer (SSL). И MySQLi и Pdo_Mysql имеют функцию соединения с SSL. Таким образом, пользователи PHP MySQL может использовать SSL для своего бизнеса.
Но, MySQL не позволит вам установить параметры конфигурации, необходимые для SSL шифрованного подключению. Например. попробуйте такой анализатор сетевых протоколов как Wireshark и посмотрите на любое подключение к обычной MySQL — вы сможете извлечь оттуда любую информацию.
Безопасность: инъекции SQL
Конечно, можно разработать пуленепробиваемый веб-приложение поверх MySQL, но это требует навыков и всегда есть возможность ошибки. Подробнее о защите от SQ-инъекций смотрите в этом материале.
Этот обзор является неполным, но может вам дать хотя бы первоначальное представление о разнице между MySQL, MySQLi и PDO_MySQL. В любом случае лично я рекомендую использовать современные инструменты для разработки веб сайтов.

Автор этого материала — я — Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML — то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.
статьи IT, MySQLi, php, разработка сайтов, MySQL
Mysqli и mysql в чем разница
Профиль
Группа: Участник
Сообщений: 165
Регистрация: 6.12.2007
Репутация: нет
Всего: 33
прошу разъяснить, существует какая-то разница между mysql && mysqli.
Я так понял разница состоит в том, что это просто альтернативный способ подключения к бд, там есть некие Extensions, если вы определенным образом настроили MySQL бд, то сможете подключаться при помощи mysql or mysqli, или можно при помощи: И mysql И mysqli.
Я сижу на Денвере, и оба способа подключения работают (возможно разработчики пакета Денвер, настроили так, чтобы mysql && mysqli сразу работали или уже по умолчанию, в бд MySQL включены эти 2-а способа подключения?)
Вопросы:
1). Правильно я понял, то что описал выше? Что это определенные настройки бд.
2). Есть ли все-таки какая-то функциональная разница между mysql && mysqli или нет? (просто я тогда смысла не пойму, если не только разработчики MySQL просто предоставили просто подключаться к бд двумя способами, которые функционально между собой не различаются?)