php连接mysql数据库的几种方式(mysql、mysqli、pdo)

php与mysql的连接有三种API接口,分别是:PHP的MySQL扩展 、PHP的mysqli扩展 、PHP数据对象(PDO) ,下面针对以上三种连接方式做下总结,以备在不同场景下选出最优方案。

一、特性及对比

  • PHP的MySQL扩展是设计开发允许PHP应用与MySQL数据库交互的早期扩展。mysql扩展提供了一个面向过程 的接口,并且是针对MySQL4.1.3或更早版本设计的。因此,这个扩展虽然可以与MySQL4.1.3或更新的数据库服务端 进行交互,但并不支持后期MySQL服务端提供的一些特性。由于太过古老,又不安全,所以已被后来的mysqli完全取代。
  • PHP的mysqli扩展,我们有时称之为MySQL增强扩展,可以用于使用 MySQL4.1.3或更新版本中新的高级特性。其特点为:面向对象接口 、prepared语句支持、多语句执行支持、事务支持 、增强的调试能力、嵌入式服务支持 、预处理方式完全解决了sql注入的问题。不过其也有缺点, 就是只支持mysql数据库。如果你要是不操作其他的数据库,这无疑是最好的选择。
  • PDO是PHP Data Objects的缩写,其是PHP应用中的一个数据库抽象层规范。PDO提供了一个统一的API接口可以使得你的PHP应用不去关心具体要 连接的数据库服务器系统类型。也就是说,如果你使用PDO的API,可以在任何需要的时候无缝切换数据库服务器,比如从oracle 到MySQL,仅仅需要修改很少的PHP代码。其功能类似于JDBC、ODBC、DBI之类接口。同样,其也解决了sql注入问题,有很好的安全性。不过 他也有缺点,某些多语句执行查询不支持(不过该情况很少)。

官文对于三者之间也做了列表性的比较:

PHP的mysqli扩展

PDO (使用PDO MySQL驱动和MySQL Native驱动)

PHP的mysql扩展

引入的PHP版本

5.0

5.0

3.0之前

PHP5.x是否包含

MySQL开发状态

活跃

在PHP5.3中活跃

仅维护

在MySQL新项目中的建议使用程度

建议 - 首选

建议

不建议

API的字符集支持

服务端prepare语句的支持情况

客户端prepare语句的支持情况

存储过程支持情况

多语句执行支持情况

大多数

是否支持所有MySQL4.1以上功能

大多数

从官方给出的这份结果上来看,优先推荐msqli,其次是pdo 。而“民间”给出的结果很多是倾向于使用PDO,因为其不担有跨库的优点,更有读写速度快的特点。

原文发布于微信公众号 - php(phpdaily)

原文发表时间:2016-08-18

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Hadoop实操

Impala并发查询缓慢问题解决方案

1442
来自专栏数据和云

盘点 Oracle 11g 中新特性带来的10大性能影响

Oracle的任何一个新版本,总是会带来大量引人瞩目的新特性,但是往往在这些新特性引入之初,首先引起的是一些麻烦,因为对于新技术的不了解、因为对于旧环境的不适应...

3694
来自专栏MYSQL轻松学

Percona Toolkit 常用工具使用介绍

Percona Toolkit 是一组高级的命令行工具,用来管理 MySQL 和系统任务,主要包括: 1、验证主节点和复制数据的一致性 2、有效的对记录行进行归...

2956
来自专栏瓜大三哥

HLS Lesson14-for循环优化:数据流

数据流约束可以使得原本顺序执行的多个 FOR 循环并行执行,但使用该约束是有条件限制的。本节讲述了数据流约束的使用方法和要求,重点讲述了如何通过代码层面的优化突...

1846
来自专栏jeremy的技术点滴

初识glusterfs

2584
来自专栏数据和云

【MySQL】磁盘写满之后,数据库show status受到阻塞的原因

编辑手记:前两天同事讨论到一个问题,当mysql从库磁盘满之后,show status及show slave status会被卡住,但其他select操作不受影...

3256
来自专栏杨建荣的学习笔记

迁移式升级的新方案测试 (r10笔记第30天)

之前写了一篇文章分析了目前存在的一个问题和改进思路。迁移式升级的一点思考 (r10笔记第27天) 当前的硬件环境是Solaris,Oracle 10gR2 单实...

3003
来自专栏Hadoop实操

CDH5.13和CM5.13的新功能

CDH5.13在美国时间10月12日正式发布,距离上次CDH5.12的7月16日,相距差不多3个月的时间,这也是Cloudera发布CDH的minor vers...

41910
来自专栏杂烩

分布式下mybatis二级缓存数据一致性解决办法

实际项目中,很多地方需要把数据缓存起来,以加快数据访问速度。比如字典表,比如数据机房表等等,缓存的实现有很多方式,如果项目中有用到mybatis,可以使用二级缓...

762
来自专栏张善友的专栏

REST 入门介绍

dudu的 HttpClient + ASP.NET Web API, WCF之外的另一个选择 讨论的人很多,说明RESTful API也开始在.NET 社区中...

1978

扫描关注云+社区