概述

本文主要写给sa看的。码农就不用看了。

mysql native driver(mysqlnd) 自从php5.3.0开始成为官方源代码的一部分,
用来取代传统的mysql client library(libmysql)。

mysqlnd是C语言写成的PHP扩展(PHP extension)。

php5.3.0之前,码农们操作数据库使用的mysql扩展函数(mysql_connect,mysql_query等函数), mysqli系列函数, PDO MYSQL函数,都是通过libmysql来与mysql数据库进行通信的。

mysqlnd出现之后,SA们就多了一个选择: 可以通过mysqlnd来与mysql数据库进行通信。

mysqlnd不能做什么

虽然mysqlnd是一个PHP扩展,但它却没有提供任何的php函数(或者说是API)给码农们使用。

码农们仍然使用mysql 扩展函数(mysql_connect, mysql_query…),或者mysqli,或者PDO MYSQL来操作数据库。 这些函数都可以通过mysqlnd来与mysql数据库通信。

它是数据库与php函数的中间层。

为什么要使用mysqlnd

原来的libmysql用的好好的,为什么还要搞一个mysqlnd出来呢?

原因一: license问题

libmysql是MYSQL AB公司开发的,现在已经是Oracle集团所属的了,它使用MYSQL license发布。

This ultimately led to MySQL support being disabled by default in PHP

mysqlnd 是php的一部分,使用PHP license发布。

从此 licensing 的问题就算是解决了。

原因二:编译问题

使用libmysql的时候,如果要正常编译php,必须首先安装好mysql。

如果是单纯的一台WEB服务器,装个mysql似乎有点浪费了。

mysqlnd的话,就不必安装mysql,直接可用。

原因三:性能问题

由于mysqlnd是一个php扩展,使用了php memory management system,在内存使用方面效率相当高。

举个例子:

使用libmysql的时候,mysql结果集中的每一行都在内存中储存了
二次


使用mysqlnd,结果集只会储存一次。

而且它还服从于php.ini中memory_limit的设置。

Using MySQL Native Driver leads to comparable or better performance than using MySQL Client Library。

mysqlnd的新特性

1 改进的persistent connection。

2 特殊函数 mysqli_fetch_all()

http://cn2.php.net/manual/en/mysqli-result.fetch-all.php

只有安装了mysqlnd, mysqli中的这个函数才可用。

3 Performance statistics calls: mysqli_get_cache_stats(), mysqli_get_client_stats(), mysqli_get_connection_stats()

在分析性能瓶颈的时候,这些函数还是蛮好用的。

详细文档可以看这里: http://cn2.php.net/manual/en/mysqlnd.stats.php

4 使用mysqlnd之后,mysqli也支持persistent connection了。

这样看起来,mysqli受益最多。

5 PHP 5.3.3 之后,mysqlnd支持SSL。

6 PHP 5.3.2 之后,mysqlnd支持Compressed Protocol

7 PHP 5.3.4 之后,windows系统中的mysqlnd支持Named Pipes。

如何安装mysqlnd

LINUX环境中,默认情况下,php中的mysql扩展还是会使用libmysql的。

如果要使用mysqlnd,就要加一个configure的参数:

./configure --with-mysql=mysqlnd \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \
[other options]

这样mysql, mysqli, pdo mysql都会使用mysqlnd。

WINDOWS中,mysqlnd默认启用,并且mysql, mysqli, pdo 默认都会使用mysqlnd。
什么都不用做。

via:
http://www.zhaokunyao.com/archives/1384

php5.3新特性 之 mysql native driver(mysqlnd)的更多相关文章

  1. PHP5.3, PHP5.4, PHP5.5新特性

    PHP 5.3中的新特性 1. 支持命名空间 (Namespace) 2. 支持延迟静态绑定(Late Static Binding) 3. 支持goto语句 4. 支持闭包.Lambda/Anony ...

  2. php5.3 PHP5.4 PHP5.5 新特性/使用PHP5.5要注意的

      1.PHP 5.3中的新特性 1.1 PHP 5.3中的新特性 1.1.1. 支持命名空间 (Namespace) 毫无疑问,命名空间是PHP5.3所带来的最重要的新特性. 在PHP5.3中,则只 ...

  3. PHP5.3新特性

    1.首先对之前滥用的语法进行了规范 众所周知PHP在语言开发过程中有一个很好的容错性,导致在数组或全局变量中包含字符串不使用引号是可以不报错的,很多业余的开发者因为懒惰而产生的安全问题十分严重,之所以 ...

  4. PHP5.4新特性

    PHP5.4 此次更新的关键新特性,包括:新增traits,更精简的Array数组语法,供测试使用的内建webserver,可以闭包使用的$this指针,实例化类成员访问, PHP 5.4.0 性能大 ...

  5. MySQL8新特性(2)--mysql的升级过程

    在之前的版本中,安装新的版本mysql之后,mysql server在下一次启动时,会自动升级数据字典表,然后dba需要执行mysql_upgrade手动升级mysql schema中的系统表,以及其 ...

  6. Php5.5新特性 Generators详解

    在PHP5.5.0版本中,新增了生成器(Generators)特性,用于简化实现迭代器接口(Iterator)创建简单的迭代器的复杂性. 通过生成器,我们可以轻松的使用foreach迭代一系列的数据, ...

  7. PHP5.4新特性(转)

    PHP5.4正式前两天发布了,之前有看了一些PHP5.4主要特性相关文章,因此在这里小结一下. 其中好几点更新是由Laruence贡献的!本文部分内容也是源自Laruence的博客. 1. Buid- ...

  8. PHP5.4新特性之上传进度支持Upload progress

    在PHP5.4版本当中给我们提供了好用的特性,上传进度的支持,我们可以配合Ajax动态获取SESSION当中的上传进度: 在使用这一特性之前,需要现在php.ini文件当中进行相应的设置:   1 2 ...

  9. php5.4新特性实践

    本机安装的是wampserver2.2e-php5.4.3-httpd2.2.22-mysql5.5.24-32b.exe集成包 自带了php5.4 1. 数组写法 定义一个数组 过去: $arr = ...

随机推荐

  1. 我的css笔记

    1.css的使用方法 内嵌样式 <p style="font-size:20pt;color:red;">这个Style定义<p> <!--里面的文字 ...

  2. 实用技巧:使用 jQuery 异步加载 JavaScript 脚本

    JavaScript 加载器在 Web 开发中是非常强大和有用的工具.目前流行的几个加载器,像 curljs.LABjs 和 RequireJS 使用都很广泛.他们功能强大的,但有些情况下可以有更简单 ...

  3. 2014年3月新鲜出炉的最佳 JavaScript 工具库

    一个 JavaScript 库是预先编写的 JavaScript 程序,用于简化 Web 应用程序开发,特别是对 Ajax 和其它 Web 为中心的技术.JavaScript 提供了多种方法,通过它来 ...

  4. Onsen UI – 新鲜出炉的 PhoneGap 界面框架

    Onsen UI 是一个基于元素自定义的 HTML5 UI 框架,用于构建你的移动前端.这个一个基于 Web 组件的概念的框架,让构建应用程序变得更加轻松.Onsen UI 专门针对 PhoneGap ...

  5. JavaScript学习笔记-对象

    枚举对象的属性:通常用for(...in...)来循环遍历,由于 for in 总是要遍历整个原型链,因此如果一个对象的继承层次太深的话会影响性能 for(var i in foo){ if(foo. ...

  6. javscript闭包的准备工作 -- 作用域与作用域链

    作用域是JavaScript最重要的概念之一,想要学好JavaScript就需要理解JavaScript作用域和作用域链的工作原理.今天这篇文章对JavaScript作用域和作用域链作简单的介绍,希望 ...

  7. ARCGIS server没有服务、silverlight不能调试、windows server2008安装时跳出“安装程序无法创建新的系统分区也无法定位现有的系统分区”的解决方案

    1.某个系统服务没开启 2.默认浏览器设置为IE.(IE内核有时候也不能调试) 3.BIOS里面的SATA设置为开启.

  8. [SharePoint] SharePoint 错误集 2

    1 Run command “New-SPConfigurationDatabase" Feature Description: error message popup after run ...

  9. 超人学院二期学员分享hadoop工作经验

    定于2月17日--2月23日的某一天,邀请咱们学员分享一下hadoop工作经验.对于没工作过的同学或者没从事过hadoop工作的同学,抓住机会啊,你可以提前准备自己关心的各种问题! 具体时间请关注QQ ...

  10. MySQL 安装 启动 基本语法概述

    MySQL 安装 启动 基本语法概述 MySQL安装和配置 我是直接使用安装包:mysql-installer-community-5.6.10.1.msi 安装的时候其中有几点要注意: 1.记住端口 ...