注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

@fc_lamp

关注Web应用解决方案MySql/PHP/Python一盏名为"飞川"的灯~

 
 
 

日志

 
 

php5.5(6) mysql mysqli PDO mysqlnd libmysql (fetch_array 无法获取数据)  

2016-05-28 19:29:51|  分类: Web技术-Mysql |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
一 mysql mysqli PDO mysqlnd libmysql是什么?
     1 关于mysql、mysqli、PDO
    mysql(注意不是:MySQL,MySQL指的是MySQL数据库)、mysqli、PDO 都是PHP中提供应用程序中访问MySQL数据库的API。也就是说我们的应用程序需要与MySQL交互你就需要这三个扩展中任意一个。
  其中:mysql 提供了过程化的一系列访问函数。
              eg:   $row mysql_fetch_array($resultMYSQL_ASSOC)
 
     需要注意的是:此扩展PHP 5.5.0 起已废弃,PHP7已完全移除,所以使用mysqli或者pdo吧。

              mysqli则可看作是mysql的增强版本,除了拥有mysql中所有函数,还提供了OOP风格的API,而且mysqli 比mysql 更稳定更高效更安全。
              eg: $row $result->fetch_array(MYSQLI_ASSOC);#注:$result为query后的集果集对象$result = $mysqli->query($query)

             PDO是一个应用层抽象类,引用官网:“PDO 提供了一个 数据访问 抽象层,这意味着,不管使用哪种数据库,都可以用相同的函数(方法)来查询和获取数据。 PDO 不提供 数据库 抽象层;它不会重写 SQL,也不会模拟缺失的特性。如果需要的话,应该使用一个成熟的抽象层。 从 PHP 5.1 开始附带了 PDO”,官方提供的PDO 驱动
             eg:$result $sth->fetch(PDO::FETCH_ASSOC);

    2 关于mysqlnd、libmysql
     上面简单说明一下mysql、mysqli、PDO那么mysqlnd与libmysql又是什么东东?
    实际上上面我们也提到了这三者为程序应用层中访问数据库的Api,但是底层与MySQL server等数据库服务访问时还需要MySQL驱动的支持。也就是说:mysql、mysqli、PDO提供了PHP应用程序层API接口,而mysqlnd、libmysql则负责与MySQL server进行网络协议交互。这样,我们的程序才能完整的访问数据库。
     其中:
             libmysql 是MySQL官方提供的访问数据库的客户端,PHP访问MySQL数据库,是通过MySQL数据库的libmysql client库,这个libmysql client是用C/C++编写的。如果你在window上使用则需要libmysql.dll,修改php.ini。Linux上则需要编译配置相关项。
        
           mysqlnd  MySQL team专为PHP开发的MySQL连接库,mysqlnd全称:MySQL native driver for PHP。mysqlnd的主要目的是为了解决长久以来mysql和php的license的问题. 从PHP5.3开始,它将作为PHP的源代码的一部分和PHP一起发布。在php 5.4中已成为默认MySQL驱动,它有如下优点: 1、mysqlnd更容易编译; 因为它是php源码树的一个组成部分 2、mysqlnd和php内部机制结合更紧密,是优化过的mysql驱动 3、mysqlnd更节省内存,从测试结果来看,比传统的mysql扩展节省40%的内存 4、mysqlnd更快 5、mysqlnd提供了丰富的性能统计功能 

二 如何配置 mysqlnd libmysql?
    引用官网设置:
// 推荐使用mysqlnd,php5.3~4的方式
$ ./configure --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-mysql=mysqlnd

// 在php5.4已作为默认驱动,所以默认方式
$ ./configure --with-mysqli --with-pdo-mysql --with-mysql

// 不推荐的方式,仍然使用libmysqlclient 方式
$ ./configure --with-mysqli=/path/to/mysql_config --with-pdo-mysql=/path/to/mysql_config --with-mysql=/path/to/mysql_config

三 如何查看驱动使用的是 mysqlnd 还是 libmysql?
我们使用phpinfo()即可查看。
如果使用的是mysqlnd,则在开启的mysql mysqli pdo为:
Client API version: mysqlnd 5.0.11-dev
Client API library version:  mysqlnd 5.0.11-dev
并且你能看到mysqlnd扩展项信息。

如果使用的是libmysql,则开启的mysql mysqli pdo为:
Client API library version:  5.6.23
即客户端版本号。



                        
      
 
           

 
  



 
  评论这张
 
阅读(139)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017