当前位置: 代码迷 >> 综合 >> 关于mysql, mysqli, pdo, pdo_mysql, mysqlnd, libmysql的解释
  详细解决方案

关于mysql, mysqli, pdo, pdo_mysql, mysqlnd, libmysql的解释

热度:54   发布时间:2023-12-09 10:52:28.0
从功能上分类

分为驱动和应用层API,驱动就是实现了Mysql客户端协议,用来和mysql server 通讯的程序,比如,当你安装了mysql server后,可以使用它自带的mysql程序来连接并操作数据库。那么别的程序要想和mysql server通讯,也要实现这一协议。比如常用的navicate;同样的,作为php而言也需要有对应的实现,但是mysql开发团队为了大力推广自己,就编写了动态链接库libmysql.dll供所有的编程语言使用,这样大家就不用去研究协议细节了,只需要引入libmysql.dll,然后抽象出一层调用即可,这看起来很不错,于是mysql扩展就是干这个的,也是我们最开始使用的操作mysql的函数库(mysql_connect, mysql_query, mysql_fetch_array等等)。

驱动:实现了指定数据库通讯协议的客户端,用来和数据库直接通讯。
API:通过调用驱动程序来调用数据库,使开发者更便捷的操作数据库。

驱动:mysqlnd, libmysql
API:mysql(对应libmysql),mysqli(对应mysqlnd),pdo_mysql(对应mysqlnd)

PDO:PHP Data Object ,是对所有数据库操作抽象的接口,它不提供具体实现,pdo_mysql,pdo_sqlite实现了pdo接口,分别实现了对mysqlnd和sqlite驱动的调用,也就是操作mysql, sqlite3数据库。

所以在编译配置的时候经常看到这样的写法
–enable-mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd

关于mysqlnd

Mysql Native驱动(Mysql Native Driver 简称:mysqlnd )在PHP5.3.0版本中被引入。PHP5.4之后的版本mysqlnd被作为默认配置选项。 由zend公司开发的MySQL数据库驱动,采用PHP开源协议(即PHP license)避免了任何可能存在的版权问题。而旧的libmysql是有Mysql AB公司(现在的Oracle Corporation)开发,依照mysql license。

libmysql有的功能mysqlnd它几乎都有,但是mysqlnd并不像libmysql那样作为通用库,它是专门为PHP而写的一个库,用了PHP的内在管理函数以及一些网络流的函数。

由于版权问题,PHP5中没有默认支持MySQL,不像以前的PHP4那样可以直接使用MySQL函数。Mysql支持还需要把libmysql.dll复制到windows目录,然后修改php.ini等等,比较麻烦。

PHP在5.3版本中,提供了一个mysqlnd库,用来访问MySQL数据库,大大提升了PHP的数据库访问性能。

我们知道,PHP访问MySQL数据库,是通过MySQL数据库的libmysql client库,这个libmysql client是用C/C++编写的,虽然一直以来PHP通过libmysql访问数据库性能也一直很好,但是却无法利用PHP本身的很多特性。

  相关解决方案