Choosing a library

The mysqli, PDO_MySQL and mysql PHP extensions are lightweight wrappers on top of a C client library. The extensions can either use the mysqlnd library or the libmysqlclient library. Choosing a library is a compile time decision.

The mysqlnd library is part of the PHP distribution since 5.3.0. It offers features like lazy connections and query caching, features that are not available with libmysqlclient, so using the built-in mysqlnd library is highly recommended. See the mysqlnd documentation for additional details, and a listing of features and functionality that it offers.

Example #1 Configure commands for using mysqlnd or libmysqlclient

// Recommended, compiles with mysqlnd
$ ./configure --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-mysql=mysqlnd

// Alternatively recommended, compiles with mysqlnd as of PHP 5.4
$ ./configure --with-mysqli --with-pdo-mysql --with-mysql

// Not recommended, compiles with libmysqlclient
$ ./configure --with-mysqli=/path/to/mysql_config --with-pdo-mysql=/path/to/mysql_config --with-mysql=/path/to/mysql_config

Library feature comparison

It is recommended to use the mysqlnd library instead of the MySQL Client Server library (libmysqlclient). Both libraries are supported and constantly being improved.

  MySQL native driver (mysqlnd) MySQL client server library (libmysqlclient)
Part of the PHP distribution Yes No
PHP version introduced 5.3.0 N/A
License PHP License 3.01 Dual-License
Development status Active Active
Lifecycle No end announced No end announced
PHP 5.4 and above; compile default (for all MySQL extensions) Yes No
PHP 5.3; compile default (for all MySQL extensions) No Yes
Compression protocol support Yes (5.3.1+) Yes
SSL support Yes (5.3.3+) Yes
Named pipe support Yes (5.3.4+) Yes
Non-blocking, asynchronous queries Yes No
Performance statistics Yes No
LOAD LOCAL INFILE respects the open_basedir directive Yes No
Uses PHP's native memory management system (e.g., follows PHP memory limits) Yes No
Return numeric column as double (COM_QUERY) Yes No
Return numeric column as string (COM_QUERY) Yes Yes
Plugin API Yes Limited
Read/Write splitting for MySQL Replication Yes, with plugin No
Load Balancing Yes, with plugin No
Fail over Yes, with plugin No
Lazy connections Yes, with plugin No
Query caching Yes, with plugin No
Transparent query manipulations (E.g., auto-EXPLAIN or monitoring) Yes, with plugin No
Automatic reconnect No Optional
add a note add a note

User Contributed Notes 1 note

up
-4
siguza at siguza dot net dot IGNORETHIS
9 years ago
If you're using named pipes under Windows, you should NOT use mysqlnd.
Tested with PHP 5.6.4, libmysqlclient gave me results of about 20ms on a page with 50 queries while mysqlnd was over 3000ms!
To Top