Learn about new MySQL releases, technical articles, events and more.
The MySQL native driver for PHP is an additional, alternative way to connect from PHP 5 and PHP 6 to the MySQL Server 4.1 or newer. It is a replacement for the libmysql, the MySQL Client Library. From now on you can use ext/mysqli either together with libmysql as you did in the past or with mysqlnd.
We have no plans to remove libmysql support from ext/mysqli, which would break existing applications. We just add a new, superior alternative to our PHP offerings.
For development discussion and bug reporting a new mailing list has been created php@lists.mysql.com. See also http://lists.mysql.com/.
You can download the source code as an archive or obtain the latest development release from a Subversion repository.
You need the PHP source code to install the new development. In the current development state the new MySQL native driver comes as a patch for ext/mysqli.
Get the PHP 5 or 6 source code from http://www.php.net. You can check out the source code from the CVS repository on http://www.php.net or download a source distribution of PHP.
For example, follow the instructions for Anonymous CVS Access to check out PHP 6:
cvs -d :pserver:cvsread@cvs.php.net:/repository checkout php6
Replace the ext/mysqli directory in your PHP source tree
Remove the ext/mysqli directory from your source tree. Copy the ext/mysqli directory from the mysqlnd source tree into the source tree.
Run buildconf --force in the PHP source directory
Run configure --with-mysqli --enable-mysqlnd in the PHP source directory
Build PHP: make
The new development is licensed under the terms of the PHP license to solve any license issues.
During the early stage of the development we will offer it from MySQL. As soon as mysqlnd is feature complete and production ready we will move it to the PHP project CVS repository on http://cvs.php.net.
On the C-level mysqlnd uses many of the proven and stable PHP internal functions. All the code of the new driver is contained in the ext/mysqli source directory. There is no need to link any external libraries. Thus you neither need to install the MySQL client library to compile PHP with ext/mysqli support nor do you need to take care of versions. Compiling has been made easier.
The performance of some functions has been improved. We have measured considerable performance improvements, for example when fetching buffered result sets.
The 5.0.1-beta release covers the functionality of the libmysql beside some functions that are marked as experimental in the ext/mysqli documentation. Support for Prepared Statements and Unicode has been added.
From the API additions discussed with Community members in November 2006 during the Frankfurt PHP conference, we managed implement:
More additions will follow.
Q: Is mysqlnd a new PHP extension?
No, the new MySQL driver for PHP is not a new PHP extension. The driver is a replacement for libmysql on the internal C level of the PHP extension ext/mysqli.
You can continue to compile the ext/mysqli extension with libmysql like ever since. We will not remove this functionality. Alternatively you can compile ext/mysqli with mysqlnd. We suggest that you try it, because mysqlnd is easier to compile and we found it to be faster than libmysql.
Q: Can other PHP extensions use it?
Yes, they can, if they want to. The source code of the new driver is the ext/mysqli/mysqlnd directory of the download files. Extension writes will find that mysqlnd mimics the API of libmysql respectively the MySQL C API.
Q: Will PDO/MySQL support it?
It is up to the PHP community to decide if and when PDO/MySQL will support it. Our development focus is currently on finishing the implementation and giving an example how to use it with ext/mysqli.
Q: Does it work with any MySQL Server before 4.1?
The MySQL native driver for PHP requires PHP 5 or PHP 6.
You can use it to connect to the MySQL Server 4.1 or newer. Please note the MySQL Lifecycle Policy
Q: How can I contribute and/or report bugs?
For development discussion and reporting bugs please subscribe to the mailing list php@lists.mysql.com. See http://lists.mysql.com/ for details.
Q: What is next on your mysqlnd TODO?
The primary goal is to stabilize the source code and to finish the ext/mysql port. On the long run we consider to further improve our support for Prepared Statements and to add a client-side result set cache.
