PHP-mysqllib和mysqlnd

1.什么是mysqlnd驱动?

PHP手册上的描述:
MySQL Native Driver is a replacement for the MySQL Client Library (libmysql).
MySQL Native Driver is part of the official PHP sources as of PHP 5.3.0.

mysqldnd即mysql native driver简写,即是由PHP源码提供的mysql驱动连接代码.它的目的是代替旧的libmysql(MySQL官方提供的)驱动.

传统的安装php的方式中,我们在编译PHP时,一般需要指定以下几项:
--with-mysql=/usr/local/mysql
--with-pdo-mysql=/usr/local/mysql

这实际上就是使用了mysql官方自带的libmysql驱动, 这是比较老的驱动, PHP 5.3开始已经不建议使用它了, 而建议使用mysqlnd.

2. PDO与mysqlnd, libmysql又是何种关系?
PDO是一个应用层抽象类,底层和mysql server连接交互需要mysql驱动的支持. 也就是说无论你使用了何种驱动,都可以使用PDO.
PDO是提供了PHP应用程序层API接口,而mysqlnd, libmysql则负责与mysql server进行网络协议交互(它并不提供php应用程序层API功能)

3. 为何要使用mysqlnd驱动?
PHP官方手册描述:
A.libmysql驱动是由mysql AB公司(现在是oracle公司)编写, 并按mysql license许可协议发布,所以在PHP中默认是被禁用的.而mysqlnd是由php官方开发的驱动,以php license许可协议发布,故就规避了许可协议和版权的问题

B.因为mysqlnd内置于PHP源代码,故你在编译安装php时就不需要预先安装mysql server也可以提供mysql client API (mysql_connect, pdo , mysqli), 这将减化一些工作量.

C. mysqlnd是专门为php优化编写的驱动,它使用了PHP本身的特性,在内存管理,性能上比libmysql更有优势. php官方的测试是:libmysql将每条记录在内存中保存了两份,而mysqlnd只保存了一份

D. 一些新的或增强的功能
  增强的持久连接
  引入特有的函数mysqli_fetch_all()
  引入一些性能统计函数 mysqli_get_cache_stats(), mysqli_get_client_stats(),
  mysqli_get_connection_stats(),

  使用上述函数,可很容易分析mysql查询的性能瓶颈!

  SSL支持(从php 5.3.3开始有效)
  压缩协议支持
  命名管道支持(php 5.4.0开始有效)

4. 看到这里,你可能跃跃欲试,很想使用mysqlnd驱动, 本节描述如何使用mysqlnd驱动
提示: 如果使用mysqlnd,并不需要预先安装mysql

编译php时,修改以下几个项参数即可
--with-mysql=mysqlnd \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd

验证:如果在phpinfo输出的mysql项中发现 client API Version  : mysqlnd, 说明mysqlnd驱动安装成功.

时间: 2024-10-25 15:32:35

PHP-mysqllib和mysqlnd的相关文章

php --with-mysql=mysqlnd

1.什么是mysqlnd驱动? PHP手册上的描述: MySQL Native Driver is a replacement for the MySQL Client Library (libmysql). MySQL Native Driver is part of the official PHP sources as of PHP 5.3.0. mysqldnd即mysql native driver简写,即是由PHP源码提供的mysql驱动连接代码.它的目的是代替旧的libmysql驱

连接mysql问题 mysqlnd cannot connect to MySQL 4.1+ using old authentication

第一篇:PHP5.3开始使用MySqlND作为默认的MySql访问驱动,而且从这个版本开始将不再支持使用旧的用户接口链接Mysql了,你可能会看到类似的提示: #2000 - mysqlnd cannot connect to MySQL 4.1+ using old authentication 解决问题的方法不是调整PHP,而是检查你的Mysql,你需要确保两件事: 你使用的Mysql是4.1+以上版本,4.1以前的版本只支持使用老的16位密码存储 你准备用于连接的数据库帐号使用的MySql

mysqlnd cannot connect to MySQL 4.1+ using the old insecure authentication解决办法

mysqlnd是个好东西.不仅可以提高与mysql数据库通信的效率,而且也可以方便的设置一些超时.如,连接超时,查询超时.但是,使用mysqlnd的时候,有个地方需要注意.就是服务端的密码格式不能使用旧的16位的存储格式,而要使用新的41位的存储格式.如果,服务端的密码格式是16位,那么就会报错.信息如下:Fatal error: Uncaught exception ‘PDOException’ with message ‘SQLSTATE[HY000] [2000] mysqlnd cann

mysqlnd扩展简介

作者:zhanhailiang 日期:2015-01-01 MySQL Native Driver简称mysqlnd,作为libmysqlclient替代品于PHP5.3.0版本引入.之前,MySQL数据库扩展mysql,mysqli,PDO MYSQL都是通过libmysqlclient实现与MySQL Server的通信.引入mysqlnd,这三个扩展都可以通过mysqlnd实现与MySQL Server的通信. 优点 mysqlnd更容易编译:因为它是php源码树的一个组成部分:而基于li

mysqlnd cannot connect 连接错误处理方法

mysqlnd cannot connect to MySQL 4.1+ using the old insecure authentication. Please use an administration tool to reset your password with the command SET PASSWORD = PASSWORD(‘your_existing_password’). This will store a new, and more secure, hash valu

php的 mysqlnd驱动

这篇文章写的好 http://blog.linuxeye.com/395.html 传统编译php的时候需要指定mysql 的参数 --with-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --with-pdo-mysql=/usr/local/mysql/bin/mysql_config \ 这也就是说,要在php编译之前,先把mysql 给装上, php5.3之后支持一个叫mysqlnd的东西,

php使用mysqlnd引发的一些问题处理

现在CentOS 5.11使用的仍是比较老旧的mysql 5.0.59 服务器版本,PHP也是使用的最高的也是5.3.3(使用yum -y install php53安装).从官方看5.3的最后一个版本为5.3.29已经于2014年8月份停止支持,出现的一些bug及安全性问题将会得不到修复,因此我们决定将PHP的版本升级到5.5.在安装的时候我们使用 ./configure --prefix=/data/php.5.5.26 --with-bz2 --with-curl --enable-ftp

mysql 、mysqli、mysqlnd

今天突然不小心看到php.ini的输出,看到mysqli 和 mysqlnd,有点不知道啥意思. PHP-MySQL 是 PHP 操作 MySQL 资料库最原始的 Extension ,PHP-MySQLi 的 i 代表 Improvement ,提更了相对进阶的功能,就 Extension 而言,本身也增加了安全性.而 PDO (PHP Data Object) 则是提供了一个 Abstraction Layer 来操作资料库,用讲的其实看不出来有有什麽差别. Mysql Native驱动(M

phpinfo有mysqlnd没有mysql

这个着实是个坑,使用phpinfo查看,明明有mysqlnd这个项目,就是找不到mysql.以前用直接运行php.exe的方法可以看到错误,可是这次就没有任何错误. 中间把php的安装路径添加到了系统Path变量,后面重启几次也没用,然后又尝试把extension_dir改成./ext,不知怎么的就好了. ; Directory in which the loadable extensions (modules) reside. ; http://php.net/extension-dir ;