首页 后端开发 php教程 php连接到MySQL数据库服务器时三种主要的API:mysql,mysqli,pdo区别及联系_PHP教程

php连接到MySQL数据库服务器时三种主要的API:mysql,mysqli,pdo区别及联系_PHP教程

Jul 13, 2016 pm 05:46 PM
api mysql mysqli pdo php 区别 数据库 服务器

 

Overview

这一部分对在PHP应用开发过程中需要和Mysql数据库交互时可用的选择进行一个简单介绍。

什么是API?

一个应用程序接口(Application Programming Interface的缩写),定义了类,方法,函数,变量等等一切 你的应用程序中为了完成特定任务而需要调用的内容。在PHP应用程序需要和数据库进行交互的时候所需要的API 通常是通过PHP扩展暴露出来(给终端PHP程序员调用)。

API可以是面向过程的,也可以是面向对象的。对于面向过程的API,我们通过调用函数来完成任务,而对于面向对象的API, 我们实例化类,并在实例化后得到的对象上调用方法。对于这两种接口而言,后者通常是首选的,因为它更加现代化,并且 给我们带来了良好的代码结构。

当构建一个需要连接到MySQL服务端的PHP应用的时候,有好几种API可供选择。此文档就是讨论这些可用的API并讨论如何为 你的应用选择一个最佳的解决方案。

什么是连接器?

在MySQL文档中,术语connector解释为“一段允许你的应用连接到MySQL数据库服务器的软件代码”。 MySQL提供了很多语言的连接器,其中包括PHP的。

在你的PHP应用需要和一个数据库服务器交互的时候,你需要书写PHP代码去完成“连接数据库服务器”,“查询数据库“以及其他数据库相关功能 等一系列活动。你的PHP应用将会使用提供这些API的软件,或者在需要的时候使用一些中间库,来处理你的应用和数据库服务器之间的交互。 这种软件通常被认为是连接器,它允许你的引用连接到数据库服务器。

什么是驱动?

驱动是一段设计用来于一种特定类型的数据库服务器进行交互的软件代码。驱动可能会调用一些库,比如MySQL客户端库或者MySQL Native驱动库。 这些库实现了用于和MySQL数据库服务器进行交互的底层协议。

通过一个例子PDO(PHP Database Object的缩写)数据库抽象层可以 使用多种特定数据库的驱动。其中一种驱动就是PDO MYSQL驱动,它就是与MySQL服务器之间的接口。

有时大家会不加区分的使用连接器和驱动这两个术语。在MySQL相关文档中"driver"术语被作为一个连接器包 中提供特定数据库部分的软件代码。

什么是扩展?

在PHP文档中你还会发现很多其他的扩展。PHP代码是由一个核心,一些可选扩展组成了核心功能。PHP 的MySQL相关扩展,比如mysqlimysql都是基于PHP扩展框架实现的。

扩展一个典型的作用就是暴露一个API给PHP程序员,允许扩展自己的功能可以被程序员使用。当然,也有一部分基于PHP扩展框架 开发的扩展不会给PHP程序员暴露API接口。

比如说PDO MySQL驱动扩展,就没有向PHP程序员暴露API接口,但是向它上层的PDO层提供了一个接口。

术语API和扩展描述的不是同一类事物,因为扩展可能并不需要暴露一个API接口给程序员。

PHP中提供的用于MySQL的主要API是什么?

当考虑连接到MySQL数据库服务器的时候,有三种主要的API可供选择:

  • PHP的MySQL扩展

  • PHP的mysqli扩展

  • PHP数据对象(PDO)

三者都有各自的优缺点。下面的讨论就是为了对每种API的关键方面给出一个简短的介绍。

什么是PHP的MySQL扩展?

这是设计开发允许PHP应用与MySQL数据库交互的早期扩展。mysql扩展提供了一个面向过程 的接口,并且是针对MySQL4.1.3或更早版本设计的。因此,这个扩展虽然可以与MySQL4.1.3或更新的数据库服务端 进行交互,但并不支持后期MySQL服务端提供的一些特性。

Note:

如果你是使用MySQL4.1.3或更新的服务端版本,强烈建议你使用mysqli 扩展替代它。

 

mysql扩展的源代码在PHP扩展目录ext/mysql下。

对于mysql扩展的更多信息,请参阅MySQL。

什么是PHP的mysqli扩展?

mysqli扩展,我们有时称之为MySQL增强扩展,可以用于使用 MySQL4.1.3或更新版本中新的高级特性。mysqli扩展在PHP 5及以后版本中包含。

mysqli扩展有一系列的优势,相对于mysql扩展的提升主要有:

  • 面向对象接口

  • prepared语句支持(译注:关于prepare请参阅mysql相关文档)

  • 多语句执行支持

  • 事务支持

  • 增强的调试能力

  • 嵌入式服务支持

 

Note:

如果你使用MySQL4.1.3或更新版本,强烈建议你使用这个扩展。

 

在提供了面向对象接口的同时也提供了一个面向过程的接口。

mysqli扩展是使用PHP扩展框架构建的,它的源代码在PHP源码目录下的ext/mysqli中。

对于mysqli扩展的更多信息,请参阅Mysqli。

什么是PDO?

PHP数据对象,是PHP应用中的一个数据库抽象层规范。PDO提供了一个统一的API接口可以使得你的PHP应用不去关心具体要 连接的数据库服务器系统类型。也就是说,如果你使用PDO的API,可以在任何需要的时候无缝切换数据库服务器,比如从Firebird 到MySQL,仅仅需要修改很少的PHP代码。

其他数据库抽象层的例子包括Java应用中的JDBC以及Perl中的DBI。

当然,PDO也有它自己的先进性,比如一个干净的,简单的,可移植的API,它最主要的缺点是会限制让你不能使用 后期MySQL服务端提供所有的数据库高级特性。比如,PDO不允许使用MySQL支持的多语句执行。

PDO是基于PHP扩展框架实现的,它的源码在PHP源码目录的ext/pdo下。

PDO的更多信息,请参阅PDO。

什么是PDO的MySQL驱动器?

PDO的MySQL驱动并不是一套API,至少从PHP程序员的角度来看是这样的。实际上,PDO的MySQL驱动处于PDO自己的下层, 提供了特定的Mysql功能。程序员直接调用PDO的API,而PDO使用了PDO的MySQL驱动完成与MySQL服务器端的交互。

PDO的MySQL驱动是众多PDO驱动中的一个。其他可用的PDO驱动包括Firebird,PostgreSQL等等。

PDO的MySQL驱动是基于PHP扩展框架实现的。它的源码在PHP源码目录下的ext/pdo_mysql。 它没有向PHP程序员暴露API。

PDO的MySQL扩展的更多信息请参阅MySQL (PDO)。

什么是PHP的MySQL Native 驱动?

为了与MySQL数据库服务端进行交互,mysql扩展,mysqli扩展, PDO MySQL驱动都使用了实现了必要的协议的底层库。以前,可用的库只有MySQL客户端库和libmysql

然而,libmysql包含的接口没有针对与PHP的应用交互进行优化,libmysql 是早期为C应用程序设计的。基于这个原因,MySQL Native驱动mysqlnd,作为libmysql的一个 针对PHP应用的修改版本被开发。

mysqlmysqli以及PDO Mysql驱动都可以各自配置使用 libmysql或者mysqlndmysqlnd作为一个专门设计 用于PHP系统的库,它在内存和速度上都比libmysql有很大提升。非常希望你去尝试这些提升。

Note:

MySQL Native驱动仅仅可以在MySQL服务端版本为4.1.3及以后版本才可以使用。

 

MySQL Native驱动是基于PHP扩展框架实现的。源代码位于PHP源码目录的ext/mysqlnd下。 它没有向PHP程序员暴露接口。

特性比较

下表比较了PHP中三种主要的MySQL连接方式的功能:

  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以上功能

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/478600.htmlTechArticleOverview 这一部分对在PHP应用开发过程中需要和Mysql数据库交互时可用的选择进行一个简单介绍。 什么是API? 一个应用程序接口(Application P...
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
4 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

mysql:简单的概念,用于轻松学习 mysql:简单的概念,用于轻松学习 Apr 10, 2025 am 09:29 AM

MySQL是一个开源的关系型数据库管理系统。1)创建数据库和表:使用CREATEDATABASE和CREATETABLE命令。2)基本操作:INSERT、UPDATE、DELETE和SELECT。3)高级操作:JOIN、子查询和事务处理。4)调试技巧:检查语法、数据类型和权限。5)优化建议:使用索引、避免SELECT*和使用事务。

PHP与Python:了解差异 PHP与Python:了解差异 Apr 11, 2025 am 12:15 AM

PHP和Python各有优势,选择应基于项目需求。1.PHP适合web开发,语法简单,执行效率高。2.Python适用于数据科学和机器学习,语法简洁,库丰富。

不同数据库系统添加列的语法有什么区别 不同数据库系统添加列的语法有什么区别 Apr 09, 2025 pm 02:15 PM

不同数据库系统添加列的语法为:mysql:alter table table_name add column_name data_type; postgresql:alter table table_name添加column_name data_type; oracle; oracle:alter table table_name add(column_name data_type)

PHP的未来:改编和创新 PHP的未来:改编和创新 Apr 11, 2025 am 12:01 AM

PHP的未来将通过适应新技术趋势和引入创新特性来实现:1)适应云计算、容器化和微服务架构,支持Docker和Kubernetes;2)引入JIT编译器和枚举类型,提升性能和数据处理效率;3)持续优化性能和推广最佳实践。

navicat怎么连接本地mysql navicat怎么连接本地mysql Apr 09, 2025 am 07:45 AM

使用 Navicat 连接本地 MySQL 数据库的步骤:创建连接,并设置连接名称、主机、端口、用户名、密码。测试连接,确保参数正确。保存连接。从连接列表中选择新连接。双击要连接的数据库。

SQL删除行后如何恢复数据 SQL删除行后如何恢复数据 Apr 09, 2025 pm 12:21 PM

直接从数据库中恢复被删除的行通常是不可能的,除非有备份或事务回滚机制。关键点:事务回滚:在事务未提交前执行ROLLBACK可恢复数据。备份:定期备份数据库可用于快速恢复数据。数据库快照:可创建数据库只读副本,在数据误删后恢复数据。慎用DELETE语句:仔细检查条件,避免误删数据。使用WHERE子句:明确指定要删除的数据。使用测试环境:在执行DELETE操作前进行测试。

如何在SQL图形化工具中添加列? 如何在SQL图形化工具中添加列? Apr 09, 2025 pm 12:54 PM

在SQL图形化工具中添加列:选择要添加列的表。右键单击并选择“Alter Table”或类似选项。定义新列的属性(名称、数据类型、长度、是否为空)。指定新列的默认值(如果适用)。选择适当的数据类型以避免数据错误。使用有意义的列名。考虑对大表执行添加列操作时的性能影响。在操作前始终备份数据库,以防止数据丢失。

navicat怎么引入sql文件 navicat怎么引入sql文件 Apr 09, 2025 am 08:54 AM

如何在 Navicat 中导入 SQL 文件?打开 Navicat 并连接到目标数据库。导航到“查询”选项卡。点击“导入 SQL 文件”按钮。选择 SQL 文件并设置导入选项。点击“导入”按钮开始导入。

See all articles