Расширения 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 или мониторинг) | Да, с плагином | Нет |
| Автоматическое переподключение | нет | опционально |