概述

本文主要写给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. ASP.NET MVC 网站开发总结(五)——Ajax异步提交表单之检查验证码

    首先提出一个问题:在做网站开发的时候,用到了验证码来防止恶意提交表单,那么要如何实现当验证码错误时,只是刷新一下验证码,而其它填写的信息不改变? 先说一下为什么有这个需求:以提交注册信息页面为例,一般 ...

  2. 【Java每日一题】20161129

    package Nov2016; public class Ques1129 { public static void main(String[] args) { final String str = ...

  3. 【Java每日一题】20161102

    package Nov2016; public class Ques1102 implements Parent{ @Override public void method() { } } inter ...

  4. XE8 for iOS 状态栏的几种效果

    XE8 实现 iOS 状态栏的几种效果: 一.状态栏底色: 开一个新工程. 设定 Fill.Color 颜色属性. 设定 Fill.Kind = Solid. 无需修改任何官方源码. 二.隐藏状态栏( ...

  5. TSwitch 中文简繁显示支持(XE6 Android)

    说明: XE6 的 TSwitch 做了很多改进,包含多语显示处理,但 XE6 似乎只认定一种中文语系「zh」,它无法处理「zh_TW」.「zh_CN」.「zh_HK」.「zh_SG」等语系,不过可以 ...

  6. 上中下三个DIV,高度自适应(上高度固定,下固定,中间自适应)(代码来自X人)

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="DivDemo.aspx.c ...

  7. SQL vs NoSQL 没有硝烟的战争!

    声明:本文译自SQL vs NoSQL The Differences,如需转载请注明出处. SQL(结构化查询语言)数据库作为一个主要的数据存储机制已经超过40个年头了.随着web应用和像MySQL ...

  8. C#如何在DataGridViewCell中自定义脚本编辑器

    上一篇博文探讨了如何自定义DataGridViewColumn实现一个TreeViewColumn来在DataGridView控件中显示TreeView控件,其实我们还可以继续发挥想象,自定义其他的列 ...

  9. PourOver – 快速筛选和排序大的数据集合

    PourOver 是一个用于对大数据集合进行快速过滤的 JavaScript 库.它可以在60fps下运行,允许您构建数据研究应用和档案,即不必等待一个数据库调用来呈现查询结果. PourOver 基 ...

  10. Mongodb的备份,恢复,导入与导出(cmd命令行实现)

    要用MongoDB,自然就要用到数据导入导出,就自己学习了一下. 在Mongo学习(二)中就讲到了在bin目录下有一些工具,本篇就是使用这些工具进行数据的导入导出及备份恢复. 注意:以下命令均在cmd ...