Расширения mysqli, PDO_MySQL и mysql - всего лишь легковесные обертки над библиотеками написанными на языке C. Эти расширения могут использовать библиотеки mysqlnd и libmysqlclient. Выбор библиотеки необходимо сделать на этапе компиляции.
Библиотека mysqlnd является частью дистрибутива PHP начиная с версии 5.3.0. Она предоставляет такие возможности как ленивое соединение(lazy connections) и кеширование запросов. В библиотеке libmysqlclient данные возможности недоступны. Так что крайне рекомендуется использовать именно встроенную библиотеку mysqlnd. Для дополнительных сведений смотрите документацию mysqlnd.
Пример #1 Комманды конфигурирования для mysqlnd и libmysqlclient
//Рекомендованная, компилирует с mysqlnd $ ./configure --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-mysql=mysqlnd //Рекомендованная, компилирует с mysqlnd начиная с PHP 5.4 $ ./configure --with-mysqli --with-pdo-mysql --with-mysql //Не рекомендованная, компилирует с libmysqlclient $ ./configure --with-mysqli=/path/to/mysql_config --with-pdo-mysql=/path/to/mysql_config --with-mysql=/path/to/mysql_config
Сравнение возможностей библиотек
Рекомендуется использовать библеотеку mysqlnd, а не MySQL Client Server library (libmysqlclient). Обе библиотеки развиваются и поддерживаются производителями.
MySQL native driver (mysqlnd) | MySQL client server library (libmysqlclient) | |
---|---|---|
Часть дистрибутива PHP | Да | Нет |
Появилась в версии PHP | 5.3.0 | Нет данных |
Лицензия | PHP License 3.01 | Двойная лицензия |
Статус разработки | Активный | Активный |
Жизненный цикл | Окончание не анонсировано | Окончание не анонсировано |
PHP 5.4 и выше; компилируется по умолчанию | Да | Нет |
PHP 5.3; компилируется по умолчанию | Нет | Да |
Поддержка протокола сжатия | Да (5.3.1+) | Да |
Поддержка SSL | Да (5.3.3+) | Да |
Поддержка именованных конвееров(named pipes) | Да (5.3.4+) | Да |
Неблокирующие, асинхронные запросы | Да | Нет |
Статистика производительности | Да | Нет |
LOAD LOCAL INFILE уважает директиву open_basedir | Да | нет |
Использует штатный менеджер памяти PHP (т.е., ограничения памяти PHP) | Да | Нет |
Возвращает числовые значения как значения с плавающей запятой(float) (COM_QUERY) | Да | нет |
Возвращает числовые значения как строки (string) (COM_QUERY) | Да | Да |
Поддержка плагинов | Да | Ограниченно |
Разделение Read/Write для репликации MySQL | Да, с плагином | Нет |
Балансировка нагрузки | Да, с плагином | Нет |
отказоустойчивость | Да, с плагином | нет |
Ленивые соединения | Да, с плагином | Нет |
Кеширование запросов | Да, с плагином | нет |
Прозрачная манипуляция запросами (т.е., auto-EXPLAIN или мониторинг) | Да, с плагином | Нет |
Автоматическое переподключение | нет | опционально |