<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>http://jackxiang.com/index.php</link> 
<description><![CDATA[赢在IT，Playin' with IT,Focus on Killer Application,Marketing Meets Technology.]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></copyright>
<item>
<link>http://jackxiang.com/post//</link>
<title><![CDATA[php5.3新特性 之 mysql native driver(mysqlnd)]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[WEB2.0]]></category>
<pubDate>Thu, 17 Feb 2011 07:27:01 +0000</pubDate> 
<guid>http://jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	<br/>概述<br/>本文主要写给sa看的。码农就不用看了。<br/>mysql native driver(mysqlnd) 自从php5.3.0开始成为官方源代码的一部分，<br/>用来取代传统的mysql client library(libmysql)。<br/>mysqlnd是C语言写成的PHP扩展(PHP extension)。<br/>php5.3.0之前，码农们操作数据库使用的mysql扩展函数(mysql_connect，mysql_query等函数), mysqli系列函数， PDO MYSQL函数，都是通过libmysql来与mysql数据库进行通信的。<br/>mysqlnd出现之后，SA们就多了一个选择: 可以通过mysqlnd来与mysql数据库进行通信。<br/>mysqlnd不能做什么<br/>虽然mysqlnd是一个PHP扩展，但它却没有提供任何的php函数（或者说是API）给码农们使用。<br/>码农们仍然使用mysql 扩展函数(mysql_connect, mysql_query…)，或者mysqli,或者PDO MYSQL来操作数据库。 这些函数都可以通过mysqlnd来与mysql数据库通信。<br/>它是数据库与php函数的中间层。<br/>为什么要使用mysqlnd<br/>原来的libmysql用的好好的，为什么还要搞一个mysqlnd出来呢？<br/>原因一: license问题<br/>libmysql是MYSQL AB公司开发的，现在已经是Oracle集团所属的了，它使用MYSQL license发布。<br/>This ultimately led to MySQL support being disabled by default in PHP<br/>mysqlnd 是php的一部分，使用PHP license发布。<br/>从此 licensing 的问题就算是解决了。<br/>原因二：编译问题<br/>使用libmysql的时候，如果要正常编译php，必须首先安装好mysql。<br/>如果是单纯的一台WEB服务器，装个mysql似乎有点浪费了。<br/>mysqlnd的话，就不必安装mysql，直接可用。<br/>原因三：性能问题<br/>由于mysqlnd是一个php扩展，使用了php memory management system,在内存使用方面效率相当高。<br/>举个例子：<br/>使用libmysql的时候，mysql结果集中的每一行都在内存中储存了二次！<br/>使用mysqlnd，结果集只会储存一次。<br/>而且它还服从于php.ini中memory_limit的设置。<br/>Using MySQL Native Driver leads to comparable or better performance than using MySQL Client Library。<br/>mysqlnd的新特性<br/>1 改进的persistent connection。<br/>2 特殊函数 mysqli_fetch_all()<br/>http://cn2.php.net/manual/en/mysqli-result.fetch-all.php<br/>只有安装了mysqlnd， mysqli中的这个函数才可用。<br/>3 Performance statistics calls: mysqli_get_cache_stats(), mysqli_get_client_stats(), mysqli_get_connection_stats()<br/>在分析性能瓶颈的时候，这些函数还是蛮好用的。<br/>详细文档可以看这里： http://cn2.php.net/manual/en/mysqlnd.stats.php<br/>4 使用mysqlnd之后，mysqli也支持persistent connection了。<br/>这样看起来，mysqli受益最多。<br/>5 PHP 5.3.3 之后，mysqlnd支持SSL。<br/>6 PHP 5.3.2 之后，mysqlnd支持Compressed Protocol<br/>7 PHP 5.3.4 之后，windows系统中的mysqlnd支持Named Pipes。<br/>如何安装mysqlnd<br/>LINUX环境中，默认情况下，php中的mysql扩展还是会使用libmysql的。<br/>如果要使用mysqlnd，就要加一个configure的参数：<br/>./configure --with-mysql=mysqlnd &#92;<br/>--with-mysqli=mysqlnd &#92;<br/>--with-pdo-mysql=mysqlnd &#92;<br/>[other options]这样mysql, mysqli, pdo mysql都会使用mysqlnd。<br/>WINDOWS中，mysqlnd默认启用，并且mysql, mysqli, pdo 默认都会使用mysqlnd。<br/>什么都不用做。<br/>PHP5.3 和 PHP6 中,均采用了 mysqlnd 做为 mysql 数据库的默认驱动.<br/>mysqlnd 是在 PHP 源码树中集成, 与原先的 libmysql 不同, mysqlnd 与内核联系更紧密.<br/>官方说内存占用要节省 40% 左右.速度也更快.<br/>顺便提一下.如果在升级到PHP5.3以后,数据库连接时出现<br/>mysql_connect()[2002]&nbsp;&nbsp;tcp://localhost:3306的错误提示时.<br/>需要将 localhost 改成 127.0.0.1,或者将连接方式由 tcp 改为 socket.<br/>在使用 phpmyadmin 这类工具时,也可以按照上述方式修改 config.inc.php<br/>来看看 mysqlnd 和 libmysql 对比<br/><a href="http://www.21andy.com/blog/upload/2010/0308/f7a3d07397226a95.png" target="_blank"><img src="http://www.21andy.com/blog/upload/2010/0308/f7a3d07397226a95.png" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>来源：http://www.zhaokunyao.com/archives/1384<br/>
]]>
</description>
</item><item>
<link>http://jackxiang.com/post//#blogcomment</link>
<title><![CDATA[[评论] php5.3新特性 之 mysql native driver(mysqlnd)]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://jackxiang.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>