Выбор библиотеки

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