/ 中存储网

PHP中的mysqlnd是什么?

2014-07-13 16:27:33 来源:中存储网
问:Mysqlnd是什么?
答:Mysqlnd,全称是 MySQL Native Driver,MySQL原生驱动,简单说它是一个PHP官方的MySQL数据库驱动。

问:搞这个库干什么?
答:我估计最重要的是版权问题,这个库是自己人码代码的,用的PHP License,所以不会用到原来的libmysql之类的,避免版权纠纷。大家都知道,PHP4中MySQL函数是作为默认支持的,最明显的在Windows下安装,是不需要有个libmysql.dll,后来PHP5就一直要这个dll,这个dll应该是MySQL官方提供的。PHP不爽,自己写个算了,嗯。因此有了Mysqlnd。

问:它和mysql、mysqli有啥区别?
答:这个问题问得好,我一开始就是搞不明白,原来呢,这两个函数库默认调用的是MySQL客户端库(By default the MySQL database extensions are configured to use MySQL Client Library直译)的,这个时候Linux上是需要安装MySQL客户端(当然我不知道MySQL客户端和MySQL客户端库有啥区别,暂时不管),但是用Mysqlnd好像不用了,只需要直接with绑定一下mysqlnd即可:
--with-mysql=mysqlnd
--with-mysqli=mysqlnd
--with-pdo-mysql=mysqlnd

问:我还能不能使用mysql_*、mysqli_*函数?
答:看到以上编译PHP的选项,就知道mysqlnd和mysql、mysqli函数库的关系了。Mysqlnd是更底层的驱动支持。设置了使用Mysqlnd后,这些函数库就会使用Mysqlnd来调用MySQL的API了。简单说,mysql_*、mysqli_*照用不误啦,和这两组函数库没啥太大影响。只不过是底层的调用被换掉而已。虚惊一场!

问:我没看出有啥好处?
答:好处就是自己写的代码,爽,独占!另外就是不需要用MySQL官方提供的Client Library了,原生支持嘛,安装PHP的时候不需要再折腾MySQL了(否则configure的时候是要指定MySQL Client Library的path的。--with-mysql[=DIR])。另外估计就是底层的,性能上的改善什么的,可以忽略了(这么说会被扁!)。

问:我也没看出什么坏处?
答:估计不太稳定,看了下5.3.6里的Mysqlnd是dev版(mysqlnd 5.0.8-dev - 20102224 - $Revision: 308673 $)。
  以上,终于知道为什么PHP5.x的某个Windows版本后,突然找不到libmysql了,原来被这玩意取代了。只需要把extension=php_mysql.dll、extension=php_mysqli.dll前面分号去掉即可!