前两天在一个php脚本中使用mysqli_fetch_all()来获取所有结果集,但却提示该方法undefined,只好退回,使用mysql_fetch_row()这个方法,一行一行的获取记录,效率很慢。后来查询获得:php
1, mysqli_fetch_all()这个函数只存在于mysqlnd中,也就是PHP的原生MySQL驱动中。mysql
2, 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. (mysqlnd是libmysql的一个替代,mysqlnd是从PHP5.3.0版本以后,官方PHP资源的一部分)。libmysql驱动是比较老的驱动,PHP 5.3开始已经不建议使用它了,而建议使用mysqlnd。sql
3,传统的安装php的方式中,咱们在编译PHP时,通常须要指定如下几项:bash
--with-mysql=/usr/local/mysql --with-pdo-mysql=/usr/local/mysql
这实际上就是使用了mysql官方自带的libmysql驱动, 这是比较老的驱动, PHP 5.3开始已经不建议使用它了, 而建议使用mysqlnd.oracle
4, 为什么要使用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开始有效);fetch
5,如何使用mysqlnd驱动?编译php时,修改如下几个项参数便可:优化
--with-mysql=mysqlnd \ --with-mysqli=mysqlnd \ --with-pdo-mysql=mysqlnd
提示: 若是使用mysqlnd,并不须要预先安装mysql。
验证:若是在phpinfo()输出的mysql项中发现 client API Version:mysqlnd, 说明mysqlnd驱动安装成功。