; 5.1MySQL可用的API

; 为了方便应用程序的开发,MySQL提供了用C 编程语言编写的客户机库,它允许从任何C 程序的内部访问MySQL数据库。客户机库实现应用程序编程接口( A P I),API 定义客户机程序如何建立和执行与服务器的通信。

; 然而,使用C 来编写MySQL程序并不受限制。许多其他语言处理器本身也是由C 编写的,或具有使用C库的能力,所以MySQL客户机库提供了这个方法,由此, MySQL对这些语言的约束可以建立在C API 的上面。这就为与MySQL服务器通信而编写应用程序提供了许多选择。客户机程序的API 是用Perl、PHP、Java、Python、C++、Tcl 和其他一些语言编写的。有关最新的清单,请查看MySQL参考指南或MySQLWeb 站点,因为有时会增加用新语言编写的A P I。

; 每种语言约束都定义自己的接口,特别是访问MySQL的规则。这里没有足够的时间来讨论MySQL可使用的每种A P I,我们只讲述最流行的三种:

; ■ C 客户机库A P I。这是MySQL的基本编程接口。

; ■ Perl 通用目标脚本语言的DBI(数据库接口) A P I。DBI 是作为与其他模块在DB D(数据库驱动程序)级接口的Perl 模块来实现的,每个模块都提供对特定类型的数据库引擎的访问(当然,我们将讨论的特定的DBD 模块也提供对MySQL的支持)。DBI 对MySQL的最普遍用法是编写由命令行来调用的独立的客户机,以及试图由Web 服务器调用的脚本来提供Web 对MySQL的访问。

; ■ PHP API。PHP 是一种脚本语言,它提供了在Web 页中嵌入程序的一种便利的方法。在发送以前,这样的页面由PHP来处理,它允许这些脚本生成动态的内容,如在页面中包括MySQL查询的结果。“PHP”原始的意思是个人主页( Personal Home Page),但是PHP 的成长已经远远超过它简单的原始功能。PHP Web 站点现在使用的这个名称表示“PHP:超文本预处理程序( Hypertext Preprocessor)”,它像GNU (是GUN而不是UNIX )一样以同样的方式自我引用。

; 使用他人成果

; 当标准的MySQL客户机不能满足需要时,您并不总是需要编写自己的程序。其他一些人一直编写程序,而这些程序中有许多是可共享得到的。请参阅附录I 中的一些样例。只要找到几个就能节省您的许多工作。

; 以上这三种A P I都有专门章节详细说明。本章只提供对API 比较的概述,用来说明它们的基本特征,并给出对特定的应用程序可能选择某个而不是其他API 的原因。

; 当然,不必只考虑某个API,应了解每个API,并用可以明智选择适合自己的API。在包括若干组件的大项目中,可能使用多个API,多种语言,这取决于每个子任务适合哪一种语言。

; 对于试图使用的任何一种API,如果需要得到必需的软件,请参阅附录A。

; 5.1.1C API

; CAPI 用于编译C 程序上下文环境内部。它是一种客户机库,提供可用来与MySQL服务器对话的最低级别的接口——具有创建与服务器通信所需的能力。DBI 和PHP 的前身DBI 的Perl 前身是Mysqlperl 模块M y s q l . p m。这个模块不再被支持,而且不应该用于新的MySQL的开发。有一件事需要明白,Mysqlperl 是依赖于MySQL的,但DBI 不是。如果编写MySQL的Perl 应用程序,然后,决定想用另外一种数据库引擎来使用它们,则移植DBI 脚本比Mysqlperl 脚本更容易一些,因为它们很少依赖于特定的数据库引擎。

如果获取了访问MySQL的一段Perl 脚本,并发现它是用Mysqlperl 而不是DBI 编写的,则仍然可以使用DBI。DBI 包括了对Mysqlperl 的仿真支持,因此不需要安装两个程序包。PHP 3 的前身是PHP/FI 2.0 (F I代表“ form interpreter ,即格式解释程序”)。像Mysqlperl 一样,PHP / F I也是过时的,所以我们就不再进一步讨论它了。

MySQLC API 的起源如果已经有编写mSQL RDBMS 程序的经验,那么将注意到MySQLC API 类似于mSQL 相应的C API。当MySQL的开发者们开始实现他们的SQL 引擎时,许多有用的共享实用程序可用于m SQL。要想花费最小的难度将那些mSQL 实用程序移植为MySQL的

实用程序是可能的,可有意地将MySQLAPI设计为与mSQL API 类似(MySQL甚至带有与mSQL API 函数名称相应的MySQL名称的简单的文本替代品的msql2mysql脚本。这个操作相对烦琐,实际上也照顾了许多涉及为使用MySQL而转换mSQL 程序的工作)。

; MySQL分发包提供的C 客户机是基于这个API 的。C 客户机库也作为MySQL对其他语言约束的基础来提供服务,但Java API 是一个例外。例如,通过连接MySQLC 客户机库代码(这个过程在附录A中通过DBI 和PHP 安装指导来举例说明),MySQL可用Perl DBI 模块专有的MySQL驱动程序和PHP 代码。

; 5.1.2 Perl DBI APIDBI API 用于Perl 脚本语言编写的应用程序的上下文环境内部。这种API 在我们考虑的这三种API 结构中是最高的,因为它可与许多数据库工作,而同时在脚本中可忽略许多特定数据库的细节。DBI 经过使用两级结构的Perl 模块来实现(请参阅图5 - 1):

; ■ DBI (数据库接口)级。为客户机脚本提供接口。这个级别提供的是抽象接口,并不是指特定数据库引擎。

; ■ DBD (数据库驱动器)级。在这个级别由特定引擎的驱动程序来提供对各种数据库引擎的支持。

MySQL对DBI 的支持环境由Msql - Mysql - modules分发包提供。这个模块在DBD 级操作。可以从分发包名称及图5 - 1中分辨它,一个驱动程序可以提供对一个以上的RDBMS 的支持。Msql-Mysql-Modules 最初是为mSQL 而编写的,后来扩展到MySQL。这种影响类似于对mSQL 和MySQL的CAPI。由于设计的MySQLCAPI 类似于mSQL CAPI,所以将mSQL DBD(使用mSQL C API)扩展到对MySQL的使用很有意义。

; DBI 体系结构编写应用程序的风格相对普通。当编写DBI 脚本时,可使用一组标准的调用。DBI 级在DBD 级调用适当的驱动程序来处理请求,对于想使用的特定数据库服务器通信中包括的特定问题,由驱动程序处理。DBD 级传送从服务器返回的数据,备份到DBI 级,使

数据出现在应用程序中。数据的格式与数据库的数据来源一致。

; 其结果得到这样一个接口,该接口从应用程序的编写者的观点隐藏了数据库引擎之间的差异,这样可使用多种不同的引擎——和驱动程序一样多。DBI 通过允许以统一风格访问每个数据库来提供一致性客户接口以增加可移植性。

; 当打开数据库时,出现由脚本编写的数据库专有的界面。当创建连接时,应指出使用哪个驱动程序。例如,要想使用MySQL数据库,应这样连接:

而要想使用Postgres 或m SQL,应这样连接:

连接以后,对该驱动程序不需要再做任何做特殊的引用。让DBI 和该驱动程序解决数据库专有的细节。

; 无论如何这都是理论问题。然而,至少有两个因素与DBI 脚本的可移植性矛盾:

; ■ 在RDBMS 引擎之间SQL 的实现不同,为一个引擎编写的SQL 另一个引擎根本不理解是完全可能的。如果SQL 相当通用,则脚本可在引擎之间作相应的移植。但如果SQL 依赖于引擎,则脚本也是这样。例如,如果使用MySQL指定的SHOW TABLES语句,则该脚本不能用其他数据库执行。

; ■ DBD 模块通常提供引擎专有类型的信息来允许脚本编写者使用特定数据库系统的特定功能。例如, MySQLDBD 提供访问查询结果中列属性的方法,如每列的最大长度、列是否是数值型的,等等。而这些属性在其他数据库中没有任何相似物。DBD 专有的特性与可移植性相背,通过使用它们,将MySQL编写的脚本用于其他数据库系统是困难的(然而,在第7章中,您将发现,笔者毫不费力地避免了由MySQLDBD 提供的MySQL专有的结构。那是因为您应该知道那些结构是什么,以便可以决定自己是否使用它们)。

; 尽管存在数据库专有脚本的这两个因素,但以抽象方式提供数据库访问的DBI 机制是完成可移植性的合理方式,只要您决定利用它多少次即可。

; 5.1.3 PHP API

; 像Perl 一样,PHP 也是一种脚本语言。但它与Perl 不同,PHP 很少作为通用目标语言来设计,而是作为编写Web 应用程序的一种语言。PHP API 主要作为在Web 页面中嵌入可执行脚本的一种方法来使用。这使Web 的开发者们很容易用动态生成上下文环境来编写页面。

当客户浏览器向Web 服务器发送PHP 页面的请求时,PHP 执行在该页面中它所发现的任何脚本,并用脚本的输出来替换它。该结果再送回浏览器。这就使浏览器中实际出现的页面根据请求的页面环境的不同而有所不同。例如,当在Web 页面中嵌入下面简短的PHP 脚本时,它出现所请求页面的主机I P地址:

可以使用脚本为访问者提供基于数据库上下文环境的最新信息。下面的样例说明可用于Historical League Web 站点的一个简单脚本。该脚本发布一个请求来确定当前的League 的成员数目,并将该数目报告给访问该站点的人(如果出现错误,则该脚本不报告任何数目):

DBI和DBD的含义

; 尽管DBI 级是独立于数据库的,而DBD 级是依赖于数据库的,但那并不是“ DBI”和“DBD”所代表的意义。它们的意思是“数据库接口”和“数据库驱动程序”。

; PHP 脚本通常看起来像是带有嵌入在“ ”标识符中的脚本的HTML 页面。一个页面可能包括若干个脚本。这为脚本的开发提供了一种非常灵活的方法。例如,如果您喜欢,可以编写一个正常的HTML 页面来创建通用的页面框架,然后再增加脚本的内

容。

; 对于不同的数据库引擎,PHP 对统一的接口不再作任何事情, DBI 也用这种方法。取而代之,每个引擎的接口看起来非常像相应的实现该引擎低级API 的C 库接口。例如,用于从PHP 脚本内部访问MySQL的PHP 函数的名称非常类似于MySQLC 客户库中函数的名称。

mysql教程 api_Mysql入门系列:MySQL可用的API相关推荐

  1. Ubuntu MySQL性能_入门系列之在Ubuntu上使用MySQL设置远程数据库优化站点性能

    介绍 随着您的应用程序或网站的增长,您可能已经超出了当前的服务器设置.如果您在同一台计算机上托管Web服务器和数据库后端,最好将这两个功能分开,以便每个功能可以在自己的硬件上运行,并分担响应访问者请求 ...

  2. linux c mysql教程_Linux c访问mysql 编写入门

    一) 前置条件: (1)       Linux 已经安装好 mysql 数据库: (2)       Linux 已经安装了 gcc 编译器: (二)数据库准备: 为了便于描述,假设数据库的 roo ...

  3. c mysql安装教程视频_MySQL安装教程 - Windows安装MySQL教程 - 小白式安装MySQL教程 - 青衫慧博客...

    版权声明 本文转发自旧站点萧瑟云日志,近期考虑准备将旧站进行关闭(没有精力维护),部分文章将会迁移至本站.文章发表于:2017-10-28 12:32:03 前言 上次给大家带来了SQL Server ...

  4. navicat连接mysql教程_navicat如何连接mysql?navicat 连接mysql Navicat使用教程

    用Phpmyadmin导入导出数据受一定限制或服务商不配合提供mysql数据库的源文件,mysql数据库管理工具navicat for mysql,对于不怎么喜欢图形界面或者不太方便使用SQL的时候. ...

  5. mySQL 教程 第16章 MySQL复制

    第16章 MySQL复制 复制解决的问题 概述:你的网站访问量非常大,对系统的稳定性非常高,那么可以使用mysql功能的复制功能,复制是指将主要的数据库的DDL和DML操作通过二进制日志传到复制服务器 ...

  6. python3.6 mysql 教程_Python3.6与MySQL建立连接

    ====建立环境==== 1.先安装Python3.6 在公众号中回复Python3.6,获得下载地址.安装. 2.安装MySQL 在公众号中回复MySQL,获得下载地址.安装. 输入mysql -u ...

  7. MySQL教程(三)—— MySQL的安装与配置

    1  安装MySQL 打开附件中的文件(分别对应电脑系统为32/64位). 点next. 三个选项,分别对应典型安装.自定义安装和完全安装,在此选择典型安装(初学者). 点install. 广告,忽略 ...

  8. mysql教程虫师_python使用mysql数据库 - 虫师

    一,安装 mysql 如果是 windows 用户, mysql 的安装非常简单,直接下载安装文件,双击安装文件一步一步进行操作即可. Linux  下的安装可能会更加简单,除了下载安装包进行安装外, ...

  9. pdo mysql 教程_PDO入门教程

    什么是PDO? 我不给大家讲定义,就是给大家我的看法,我认为PDO就是PHP官方提供的.面向对象的.用来操作数据库的扩展.PDO不单可以访问Mysql,好像一般 的数据库都行,只要装上对应的扩展就可以 ...

最新文章

  1. 基于c语言优先级病房呼叫_C语言
  2. 探究rh6上mysql5.6的主从、半同步、GTID多线程、SSL认证主从复制
  3. 【组队学习】【35期】吃瓜教程——西瓜书+南瓜书
  4. 病理分析常见数据集及常用模型方法总结
  5. CentOS 配置防火墙操作实例(启、停、开、闭端口)
  6. g标签 怎么设置svg_SVG(可缩放矢量图形)图片添加、高斯模糊、渐变与g标签
  7. python watchdog 同时检测到多个事件_python中watchdog文件监控与检测上传功能
  8. SpringCloud常见面试题(2020最新版)
  9. python elseif用法_Python关键字简介
  10. 都是过客,相煎何急?
  11. python实现mapreduce求平均值
  12. mcgs 安装没有权限_我的电脑为什么不能安装mcgs组态软件
  13. undo歌词中文音译_undo的中文谐音歌词
  14. python自动排版公众号_GitHub - sunshine2337/maxpress: MaxPress:MarkDown+Python实现微信公众号一键排版...
  15. Software Testing - UI自动化测试常用设计模式之原型(Java)
  16. 肠道细菌四大“门派”——拟杆菌门,厚壁菌门,变形菌门,放线菌门
  17. Unity5.6——VideoPlayer播放
  18. module_param传递参数
  19. daimayuan每日一题#851 Good Permutations
  20. 数字证书原理是什么?

热门文章

  1. QML做图片倒影效果(控件倒影)
  2. oracle join详解,inner join和left join之间的区别详解
  3. Oracle 原理:DML触发器和数据库触发器
  4. 启明云端分享|ESP32-C3阿里云连接测试
  5. 堆栈转化8进制_11张卡片学会进制转换
  6. 由点及面,专有云ABC Stack如何护航云平台安全?
  7. 职高学会计电算化好还是学计算机好,会计电算化主要学什么?
  8. python硬盘api-使用python获取电脑的磁盘信息方法
  9. 19 Error handling and Go go语言错误处理
  10. 项目问题记录20170702