這篇文章給大家介紹怎么理解MySQL的API接口,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
在黃岡等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都網(wǎng)站制作、網(wǎng)站建設(shè) 網(wǎng)站設(shè)計制作按需規(guī)劃網(wǎng)站,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),高端網(wǎng)站設(shè)計,網(wǎng)絡(luò)營銷推廣,外貿(mào)網(wǎng)站制作,黃岡網(wǎng)站建設(shè)費用合理。
MySQL 的 API 接口
為了方便應(yīng)用程序的開發(fā),MySQL 提供了用 C 編程語言編寫的客戶機(jī)庫,它允許從任何 C 程序的內(nèi)部訪問 MySQL 數(shù)據(jù)庫??蛻魴C(jī)庫實現(xiàn)應(yīng)用程序編程接口(API),API 定義客戶機(jī)程序如何建立和執(zhí)行與服務(wù)器的通信。
然而,使用 C 來編寫 MySQL 程序并不受限制。許多其他語言處理器本身也是由 C 編寫的,或具有使用 C 庫的能力,所以 MySQL 客戶機(jī)庫提供了這個方法,由此, MySQL 對這些語言的約束可以建立在 C API 的上面。這就為與 MySQL 服務(wù)器通信而編寫應(yīng)用程序提供了許多選擇??蛻魴C(jī)程序的 API 是用 Perl、PHP、Java、Python、C++、Tcl 和其他一些語言編寫的。
每種語言約束都定義自己的接口,特別是訪問 MySQL 的規(guī)則。這里沒有足夠的時間來討論 MySQL 可使用的每種 API,我們只講述最流行的三種:
■ C 客戶機(jī)庫 API。這是 MySQL 的基本編程接口。
■ Perl 通用目標(biāo)腳本語言的 DBI(數(shù)據(jù)庫接口)API。DBI 是作為與其他模塊在 DBD(數(shù)據(jù)庫驅(qū)動程序)級接口的 Perl 模塊來實現(xiàn)的,每個模塊都提供對特定類型的數(shù)據(jù)庫引擎的訪問(當(dāng)然,我們將討論的特定的 DBD 模塊也提供對 MySQL 的支持)。DBI 對 MySQL 的最普遍用法是編寫由命令行來調(diào)用的獨立的客戶機(jī),以及試圖由 Web 服務(wù)器調(diào)用的腳本來提供 Web 對 MySQL 的訪問。
■ PHP API。PHP 是一種腳本語言,它提供了在 Web 頁中嵌入程序的一種便利的方法。在發(fā)送以前,這樣的頁面由 PHP 來處理,它允許這些腳本生成動態(tài)的內(nèi)容,如在頁面中包括 MySQL 查詢的結(jié)果?!癙HP” 原始的意思是個人主頁( Personal Home Page),但是 PHP 的成長已經(jīng)遠(yuǎn)遠(yuǎn)超過它簡單的原始功能。PHP Web 站點現(xiàn)在使用的這個名稱表示“PHP:超文本預(yù)處理程序( Hypertext Preprocessor)”,它像 GNU(是 GUN 而不是 UNIX )一樣以同樣的方式自我引用。
當(dāng)標(biāo)準(zhǔn)的 MySQL 客戶機(jī)不能滿足需要時,您并不總是需要編寫自己的程序。其他一些人一直編寫程序,而這些程序中有許多是可共享得到的。只要找到幾個就能節(jié)省您的許多工作。
以上這三種 API 都有專門章節(jié)詳細(xì)說明。本章只提供對 API 比較的概述,用來說明它們的基本特征,并給出對特定的應(yīng)用程序可能選擇某個而不是其他 API 的原因。
當(dāng)然,不必只考慮某個 API,應(yīng)了解每個 API,并用可以明智選擇適合自己的 API。在包括若干組件的大項目中,可能使用多個 API,多種語言,這取決于每個子任務(wù)適合哪一種語言。
CAPI 用于編譯 C 程序上下文環(huán)境內(nèi)部。它是一種客戶機(jī)庫,提供可用來與 MySQL 服務(wù)器對話的最低級別的接口——具有創(chuàng)建與服務(wù)器通信所需的能力。DBI 和 PHP 的前身 DBI 的 Perl 前身是 Mysqlperl 模塊 Mysql.pm。這個模塊不再被支持,而且不應(yīng)該用于新的 MySQL 的開發(fā)。有一件事需要明白,Mysqlperl 是依賴于 MySQL 的,但DBI 不是。如果編寫 MySQL 的 Perl 應(yīng)用程序,然后,決定想用另外一種數(shù)據(jù)庫引擎來使用它們,則移植 DBI 腳本比 Mysqlperl 腳本更容易一些,因為它們很少依賴于特定的數(shù)據(jù)庫引擎。
如果獲取了訪問 MySQL 的一段 Perl 腳本,并發(fā)現(xiàn)它是用 Mysqlperl 而不是 DBI 編寫的,則仍然可以使用 DBI。DBI 包括了對 Mysqlperl 的仿真支持,因此不需要安裝兩個程序包。PHP3 的前身是 PHP/FI 2.0 (FI代表“ form interpreter ,即格式解釋程序”)。像 Mysqlperl 一樣,PHP/FI 也是過時的,所以我們就不再進(jìn)一步討論它了。
MySQL C API 的起源如果已經(jīng)有編寫 mSQL RDBMS 程序的經(jīng)驗,那么將注意到 MySQLC API 類似于 mSQL 相應(yīng)的 C API。當(dāng) MySQL 的開發(fā)者們開始實現(xiàn)他們的 SQL 引擎時,許多有用的共享實用程序可用于 mSQL。要想花費最小的難度將那些 mSQL 實用程序移植為 MySQL 的實用程序是可能的,可有意地將 MySQLAPI 設(shè)計為與mSQL API 類似(MySQL 甚至帶有與 mSQL API 函數(shù)名稱相應(yīng)的 MySQL 名稱的簡單的文本替代品的msql2mysql 腳本。這個操作相對煩瑣,實際上也照顧了許多涉及為使用 MySQL 而轉(zhuǎn)換 mSQL 程序的工作)。
MySQL 分發(fā)包提供的C 客戶機(jī)是基于這個 API 的。C 客戶機(jī)庫也作為 MySQL 對其他語言約束的基礎(chǔ)來提供服務(wù),但 Java API 是一個例外。例如,通過連接 MySQLC 客戶機(jī)庫代碼,MySQL 可用 Perl DBI 模塊專有的MySQL驅(qū)動程序和 PHP 代碼。
Perl DBI APIDBI API 用于 Perl 腳本語言編寫的應(yīng)用程序的上下文環(huán)境內(nèi)部。這種 API 在我們考慮的這三種 API 結(jié)構(gòu)中是最高的,因為它可與許多數(shù)據(jù)庫工作,而同時在腳本中可忽略許多特定數(shù)據(jù)庫的細(xì)節(jié)。DBI 經(jīng)過使用兩級結(jié)構(gòu)的 Perl 模塊來實現(xiàn)。
■ DBI (數(shù)據(jù)庫接口)級。為客戶機(jī)腳本提供接口。這個級別提供的是抽象接口,并不是指特定數(shù)據(jù)庫引擎。
■ DBD (數(shù)據(jù)庫驅(qū)動器)級。在這個級別由特定引擎的驅(qū)動程序來提供對各種數(shù)據(jù)庫引擎的支持。
MySQL 對 DBI 的支持環(huán)境由 Msql - Mysql - modules 分發(fā)包提供。這個模塊在DBD 級操作??梢詮姆职l(fā)包名稱中分辨它,一個驅(qū)動程序可以提供對一個以上的RDBMS 的支持。Msql-Mysql-Modules 最初是為mSQL 而編寫的,后來擴(kuò)展到MySQL。這種影響類似于對 mSQL 和 MySQL 的 CAPI。由于設(shè)計的 MySQLCAPI 類似于 mSQL CAPI,所以將 mSQL DBD(使用 mSQL C API)擴(kuò)展到對MySQL的使用很有意義。
DBI 體系結(jié)構(gòu)編寫應(yīng)用程序的風(fēng)格相對普通。當(dāng)編寫 DBI 腳本時,可使用一組標(biāo)準(zhǔn)的調(diào)用。DBI 級在 DBD 級調(diào)用適當(dāng)?shù)尿?qū)動程序來處理請求,對于想使用的特定數(shù)據(jù)庫服務(wù)器通信中包括的特定問題,由驅(qū)動程序處理。DBD 級傳送從服務(wù)器返回的數(shù)據(jù),備份到 DBI 級,使數(shù)據(jù)出現(xiàn)在應(yīng)用程序中。數(shù)據(jù)的格式與數(shù)據(jù)庫的數(shù)據(jù)來源一致。
其結(jié)果得到這樣一個接口,該接口從應(yīng)用程序的編寫者的觀點隱藏了數(shù)據(jù)庫引擎之間的差異,這樣可使用多種不同的引擎——和驅(qū)動程序一樣多。DBI 通過允許以統(tǒng)一風(fēng)格訪問每個數(shù)據(jù)庫來提供一致性客戶接口以增加可移植性。
當(dāng)打開數(shù)據(jù)庫時,出現(xiàn)由腳本編寫的數(shù)據(jù)庫專有的界面。當(dāng)創(chuàng)建連接時,應(yīng)指出使用哪個驅(qū)動程序。
連接以后,對該驅(qū)動程序不需要再做任何做特殊的引用。讓 DBI 和該驅(qū)動程序解決數(shù)據(jù)庫專有的細(xì)節(jié)。
無論如何這都是理論問題。然而,至少有兩個因素與 DBI 腳本的可移植性矛盾:
■ 在RDBMS 引擎之間 SQL 的實現(xiàn)不同,為一個引擎編寫的 SQL 另一個引擎根本不理解是完全可能的。如果 SQL 相當(dāng)通用,則腳本可在引擎之間作相應(yīng)的移植。但如果 SQL 依賴于引擎,則腳本也是這樣。例如,如果使用 MySQL 指定的 SHOW TABLES 語句,則該腳本不能用其他數(shù)據(jù)庫執(zhí)行。
■ DBD 模塊通常提供引擎專有類型的信息來允許腳本編寫者使用特定數(shù)據(jù)庫系統(tǒng)的特定功能。例如, MySQLDBD 提供訪問查詢結(jié)果中列屬性的方法,如每列的最大長度、列是否是數(shù)值型的,等等。而這些屬性在其他數(shù)據(jù)庫中沒有任何相似物。DBD 專有的特性與可移植性相背,通過使用它們,將 MySQL 編寫的腳本用于其他數(shù)據(jù)庫系統(tǒng)是困難的。
盡管存在數(shù)據(jù)庫專有腳本的這兩個因素,但以抽象方式提供數(shù)據(jù)庫訪問的 DBI 機(jī)制是完成可移植性的合理方式,只要您決定利用它多少次即可。
像 Perl 一樣,PHP 也是一種腳本語言。但它與Perl 不同,PHP 很少作為通用目標(biāo)語言來設(shè)計,而是作為編寫 Web 應(yīng)用程序的一種語言。PHP API 主要作為在 Web 頁面中嵌入可執(zhí)行腳本的一種方法來使用。這使Web 的開發(fā)者們很容易用動態(tài)生成上下文環(huán)境來編寫頁面。
當(dāng)客戶瀏覽器向 Web 服務(wù)器發(fā)送 PHP 頁面的請求時,PHP 執(zhí)行在該頁面中它所發(fā)現(xiàn)的任何腳本,并用腳本的輸出來替換它。該結(jié)果再送回瀏覽器。這就使瀏覽器中實際出現(xiàn)的頁面根據(jù)請求的頁面環(huán)境的不同而有所不同。例如,當(dāng)在 Web 頁面中嵌入下面簡短的 PHP 腳本時,它出現(xiàn)所請求頁面的主機(jī) IP 地址:
可以使用腳本為訪問者提供基于數(shù)據(jù)庫上下文環(huán)境的最新信息。下面的樣例說明可用于 Historical League Web 站點的一個簡單腳本。該腳本發(fā)布一個請求來確定當(dāng)前的 League 的成員數(shù)目,并將該數(shù)目報告給訪問該站點的人(如果出現(xiàn)錯誤,則該腳本不報告任何數(shù)目):
盡管 DBI 級是獨立于數(shù)據(jù)庫的,而 DBD 級是依賴于數(shù)據(jù)庫的,但那并不是“ DBI”和“DBD”所代表的意義。它們的意思是“數(shù)據(jù)庫接口”和“數(shù)據(jù)庫驅(qū)動程序”。
PHP 腳本通??雌饋硐袷菐в星度朐凇?”標(biāo)識符中的腳本的 HTML 頁面。一個頁面可能包括若干個腳本。這為腳本的開發(fā)提供了一種非常靈活的方法。例如,如果您喜歡,可以編寫一個正常的 HTML 頁面來創(chuàng)建通用的頁面框架,然后再增加腳本的內(nèi)容。
對于不同的數(shù)據(jù)庫引擎,PHP 對統(tǒng)一的接口不再作任何事情, DBI 也用這種方法。取而代之,每個引擎的接口看起來非常像相應(yīng)的實現(xiàn)該引擎低級 API 的 C 庫接口。例如,用于從 PHP 腳本內(nèi)部訪問 MySQL 的PHP 函數(shù)的名稱非常類似于 MySQL C 客戶庫中函數(shù)的名稱。
關(guān)于怎么理解MySQL的API接口就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
文章標(biāo)題:怎么理解MySQL的API接口
轉(zhuǎn)載來于:http://www.rwnh.cn/article26/gcgijg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供用戶體驗、網(wǎng)站設(shè)計公司、定制開發(fā)、搜索引擎優(yōu)化、軟件開發(fā)、App設(shè)計
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)