今天想彻底搞清楚php与mysql的关系,于是在php官方网站(http://php.net/manual/en/mysqli.installation.php)

看了一下mysqli,mysql。感觉还是云里雾里,里面有提到:libmysqlclientmysqlnd,看了下面的文章,清楚了很多。

1. PHP拓展

1.1 PHP核心

PHP的核心是由两个独立的部分组成的。

在最底层是Zend Engine (ZE)。ZE 负责把人类可以理解的脚本解析成机器可以理解的符号(token),然后在一个进程空间内执行这些符号。ZE还负责内存管理,变量作用域,以及函数调用的调度。

另一部分是PHP。PHP负责与SAPI层(Server Application Programming Interface,经常被用来与Apache, IIS, CLI, CGI等host环境进行关联)的交互以及绑定。它也为safemode和openbasedir检查提供了一个统一的控制层,就像streams层把文件和网络I/O与用户空间函数(例如fopen(),fread()和fwrite())关联起来一样。

1.2 拓展形式

  • PEAR。PEAR是PHP扩展与应用库(the PHP Extension and Application Repository)的缩写。它是一个PHP扩展及应用的一个代码仓库,简单地说,PEAR就是PHP的CPAN(Perl第三方代码库)。

  • PECL。PECL(PHP Extension Community Library),PHP的扩展库,它提供了一系列已知的扩展库,由C++等其他语言编写而成,以.so形式出现,.so 为共享库,是shared object,用于动态连接的,和dll差不多,为比PEAR更快,但是与PEAR不同的是,PECL需要在服务器上配置并被注册到主机中。

最直接的表述:Pear是PHP的上层扩展,Pecl是PHP的底层扩展。

2. MYSQL拓展

2.1 如何访问MYSQL数据库

可以使用的PHP拓展有这么几个:

  1. mysql
  2. mysqli
  3. pdo

其中因为mysql是面向过程的,而且无法使用新版本MySQL带来的一些高级特性,现在已经不推荐使用。推荐使用mysqli以及pdo拓展。

但是这三种数据库访问方式,在PHP拓展的角度上看,还是比较上层的拓展,依赖更底层的库去连接和访问数据库。

底层的库,我们目前有这么两个:

  1. libmysqlclient
  2. mysqlnd

但是决定使用这两个库中的那一个,是PHP语言编译时的决定,一旦PHP编译完成以后,要更改估计比较困难(我没有尝试过,因此不太肯定)。

2.2 libmysqlclient

这是一个根据 MySQL client/server 协议,使用C语言实现的库。有很多的客户端api使用libmysqlclient这个库去和MySQL Server进行通信(Exceptions are except Connector/J and Connector/Net.)。

2.3 mysqlnd

MySQL Native Driver实现和libmysqlclient同样的功能。但MySQL Native Driver是PHP 5.3.0 官方的代码。

mysqlnd 和 libmysqlclient最大的不同是,mysqlnd 针对与PHP的应用交互进行优化,而libmysqlclient是早期为C应用程序设计的,并没有针对性的优化。

另外,mysqlnd 可以支持很多高级的特性,比如prepared语句支持(曾经在这个prepare的问题上被坑过,当时用的正是libmysqlclient)。

2.4 性能对比

更加详细的对比,移步博文Benchmark: libmysql vs mysqlnd

什么是php?以及mysqlnd与libmysqlclient的更多相关文章

  1. C语言操作mysql

    php中 mysqli, pdo 可以用 mysqlnd 或 libmysqlclient 实现 前者 从 php 5.3.0起已内置到php中, 并且支持更多的特性,推荐用 mysqlnd mysq ...

  2. 1 Easy Read/Write Splitting with PHP’s MySQLnd

    以下均是使用翻译软件翻译的! Note: This is part one in our Extending MySQL with PHP's MySQLnd Series, read part 2 ...

  3. error while loading shared libraries: libmysqlclient.so.18: cannot open shared object file: No such file or directory

    zabbix3.2启动有如下报错: # service zabbix_server startStarting zabbix_server:  /home/zabbix-server/sbin/zab ...

  4. 交叉编译总结 libosscore.a libcurl.a libmysqlclient.a

    把工程文件交叉编译到arm上运行,着实花费了一番功夫. 首先遇到的错误是 X uses VFP register arguments, B does not 百度了一下,发现是硬浮点和软浮点的问题,原 ...

  5. mysqlnd cannot connect 连接错误处理方法

    mysqlnd cannot connect to MySQL 4.1+ using the old insecure authentication. Please use an administra ...

  6. phpinfo有mysqlnd没有mysql

    这个着实是个坑,使用phpinfo查看,明明有mysqlnd这个项目,就是找不到mysql.以前用直接运行php.exe的方法可以看到错误,可是这次就没有任何错误. 中间把php的安装路径添加到了系统 ...

  7. Python使用MySQLdb报Library not loaded: libmysqlclient.18.dylib错误

    Library not loaded: libmysqlclient.18.dylib就是找不到这个文件,首先要确定是否有这个文件 可以使用find命令,确认位置后可以使用如下两种方法:1.制作软连接 ...

  8. mysqlnd cannot connect to MySQL 4.1+

    phpMyAdmin - error #2000 - mysqlnd cannot connect to MySQL 4.1+ using the old insecure authenticatio ...

  9. mysql: error while loading shared libraries: libmysqlclient.so.16

    [root@host_41 mysql]# mysqlmysql: error while loading shared libraries: libmysqlclient.so.16: cannot ...

随机推荐

  1. 删除mysql服务

    当我们卸载完MySQL后重新装MySQL提示 The service already exists! 是因为服务名称还残留在系统里 打开cmd 输入下面 sc delete mysql 这个mysql ...

  2. [转帖] 安装Eclipse插件长时间卡在 calculating requirements and dependencies

    把"Contact all update sites during install to find required software"前面的勾去掉,然后点击下一步,这样之后问题迎 ...

  3. Objective C 代码片段(类别)

    @interface NSString (reverse) -(NSString *) reverseString; @end @implementation NSString (reverse) - ...

  4. android内存优化发展——使用软引用

    整个Android开发者一定是遇到了内存溢出这个头疼的问题,一旦这个问题.很难直接决定我们的应用程序是哪里出了问题,为了找到问题的解决方案,必须累积发行通过一些内存分析工具高速定位和强大的体验,现在详 ...

  5. Nginx下载服务生产服务器调优

    一.内存调优 内核关于内存的选项都在/proc/sys/vm目录下.   1.pdflush,用于回写内存中的脏数据到硬盘.可以通过 /proc/sys/vm/vm.dirty_background_ ...

  6. LoC

    对于图片.Flash等非文本文件统计文件数量.文件大小: 对于文本文件统计文件数量.文本行数.字符数:

  7. cglib源码分析(三):Class生成策略

    cglib中生成类的工作是由AbstractClassGenerator的create方法使用相应的生成策略完成,具体代码如下: private GeneratorStrategy strategy ...

  8. sqlserver 连不上的问题

    tcp ip  属性 ipall  属性改为1433

  9. 转:四种方案解决ScrollView嵌套ListView问题

    转载自:http://blog.sina.com.cn/s/blog_46798aa80101lxbk.html 原始的连接已经不知道是哪里了,项目中遇到了同样的问题,花了一下午都没有想到是嵌套引起的 ...

  10. 学习笔记_Java_day14—编码实战___一个注册页面的完整流程