php編程數(shù)據(jù)庫(kù)接口 php接口開(kāi)發(fā)示例代碼

PHP連接數(shù)據(jù)庫(kù)的幾種方法

用ASP連接各種數(shù)據(jù)庫(kù)的方法

在揚(yáng)州等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都做網(wǎng)站、成都網(wǎng)站建設(shè)、成都外貿(mào)網(wǎng)站建設(shè) 網(wǎng)站設(shè)計(jì)制作按需求定制制作,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),成都品牌網(wǎng)站建設(shè),全網(wǎng)整合營(yíng)銷推廣,成都外貿(mào)網(wǎng)站建設(shè),揚(yáng)州網(wǎng)站建設(shè)費(fèi)用合理。

一、ASP的對(duì)象存取數(shù)據(jù)庫(kù)方法

在ASP中,用來(lái)存取數(shù)據(jù)庫(kù)的對(duì)象統(tǒng)稱ADO(Active Data Objects),主要含有三種對(duì)象:Connection、Recordset 、Command

Connection:負(fù)責(zé)打開(kāi)或連接數(shù)據(jù)

Recordset:負(fù)責(zé)存取數(shù)據(jù)表

Command:負(fù)責(zé)對(duì)數(shù)據(jù)庫(kù)執(zhí)行行動(dòng)查詢命令

二、連接各數(shù)據(jù)庫(kù)的驅(qū)動(dòng)程序

連接各數(shù)據(jù)庫(kù)可以使用驅(qū)動(dòng)程序,也可以使用數(shù)據(jù)源,不過(guò)我建議大家使用驅(qū)動(dòng)程序,因?yàn)槭褂抿?qū)動(dòng)程序非常方便、簡(jiǎn)單,而使用數(shù)據(jù)源比較麻煩。

ODBC鏈接

適合數(shù)據(jù)庫(kù)類型 鏈接方式

access "Driver={microsoft access driver(*.mdb)};dbq=*.mdb;uid=admin;pwd=pass;"

dBase "Driver={microsoft dbase driver(*.dbf)};driverid=277;dbq=------------;"

Oracle "Driver={microsoft odbc for oracle};server=oraclesever.world;uid=admin;pwd=pass;"

MSSQL server "Driver={sql server};server=servername;database=dbname;uid=sa;pwd=pass;"

MS text "Driver={microsoft text driver(*.txt; *.csv)};dbq=-----;extensions=asc,csv,tab,txt;Persist SecurityInfo=false;"

Visual Foxpro "Driver={microsoft Visual Foxpro driver};sourcetype=DBC;sourceDB=*.dbc;Exclusive=No;"

MySQL "Driver={mysql};database=yourdatabase;uid=username;pwd=yourpassword;option=16386;"

OLEDB鏈接

適合的數(shù)據(jù)庫(kù)類型 鏈接方式

access "Provider=microsoft.jet.oledb.4.0;data source=your_database_path;user id=admin;password=pass;"

Oracle "Provider=OraOLEDB.Oracle;data source=dbname;user id=admin;password=pass;"

MS SQL Server "Provider=SQLOLEDB;data source=machinename;initial catalog=dbname;userid=sa;password=pass;"

MS text "Provider=microsof.jet.oledb.4.0;data source=your_path;Extended Properties′text;FMT=Delimited′"

而我們?cè)谝话闱闆r下使用Access的數(shù)據(jù)庫(kù)比較多,在這里我建議大家連接Access數(shù)據(jù)庫(kù)使用下面的方法:

dim conn

set conn = server.createobject("adodb.connection")

conn.open = "provider=microsoft.jet.oledb.4.0;" "data source = " server.mappath("../db/bbs.mdb")

其中../db/bbs.mdb是你的數(shù)據(jù)庫(kù)存放的相對(duì)路徑!如果你的數(shù)據(jù)庫(kù)和ASP文件在同一目錄下,你只要這樣寫就可以了:

dim conn

set conn = server.createobject("adodb.connection")

conn.open = "provider=microsoft.jet.oledb.4.0;" "data source = " server.mappath("bbs.mdb")

有許多初學(xué)者在遇到數(shù)據(jù)庫(kù)連接時(shí)總是會(huì)出問(wèn)題,然而使用上面的驅(qū)動(dòng)程序只要你的數(shù)據(jù)庫(kù)路徑選對(duì)了就不會(huì)出問(wèn)題了。

用php編寫一個(gè)頁(yè)面(index.php),要求能連接數(shù)據(jù)庫(kù),并能實(shí)現(xiàn)添加、修改和刪除數(shù)據(jù)表的內(nèi)容。

從字面上說(shuō),ASP包含三方面含義:

1、Active:ASP使用了Microsoft的ActiveX技術(shù)。ActiveX(COM)技術(shù)是現(xiàn)在Microsoft軟件的重要基礎(chǔ)。它采用封裝對(duì)象,程序調(diào)用對(duì)象的技術(shù),簡(jiǎn)化編程,加強(qiáng)程序間合作。ASP本身封裝了一些基本組件和常用組件,有很多公司也開(kāi)發(fā)了很多實(shí)用組件。只要你可以在服務(wù)器上安裝這些組件,通過(guò)訪問(wèn)組件,你就可以快速、簡(jiǎn)易地建立自己的WEB應(yīng)用。

2、Server:ASP運(yùn)行在服務(wù)器端。這樣就不必?fù)?dān)心瀏覽器是否支持ASP所使用的編程語(yǔ)言。ASP的編程語(yǔ)言可以是VBSCRIPT和 JSCRIPT。VBSCRIPT是VB的一個(gè)簡(jiǎn)集,會(huì)VB的人可以很方便的快速上手。然而Netscape瀏覽器不支持客戶端的VBSCRIPT,所以最好不要在客戶端使用VBSCRIPT。而在服務(wù)器端,則無(wú)需考慮瀏覽器的支持問(wèn)題。Netscape瀏覽器也可以正常顯示ASP頁(yè)面。

3、Pages:ASP返回標(biāo)準(zhǔn)的HTML頁(yè)面,可以正常地在常用的瀏覽器中顯示。瀏覽者查看頁(yè)面源文件時(shí),看到的是ASP生成的HTML代碼,而不是ASP程序代碼。這樣就可以防止別人抄襲程序。

由此我們可以看出,ASP是在IIS下開(kāi)發(fā)WEB應(yīng)用的一種簡(jiǎn)單、方便的編程工具。在了解了VBSCRIPT的基本語(yǔ)法后,只需要清楚各個(gè)組件的用途、屬性、方法,就可以輕松編寫出自己的ASP系統(tǒng)。

二、ASP能干什么?

ASP是基于WEB的一種編程技術(shù),可以說(shuō)是CGI的一種。它可以完成以往CGI程序的所有功能,如計(jì)數(shù)器、留言簿、公告板、聊天室等等。ASP可以輕松地實(shí)現(xiàn)對(duì)頁(yè)面內(nèi)容的動(dòng)態(tài)控制,根據(jù)不同的瀏覽者,顯示不同的頁(yè)面內(nèi)容。而瀏覽者一點(diǎn)覺(jué)察不出來(lái),就像為他專門制作的頁(yè)面一樣。使用各種各樣的組件,ASP 可以完成無(wú)比強(qiáng)大的功能。使用FileSystemObject,可以對(duì)服務(wù)器上的文件進(jìn)行操作,瀏覽、復(fù)制、移動(dòng)、刪除等。有ADO(Active Database Object,動(dòng)態(tài)數(shù)據(jù)庫(kù)對(duì)象)的支持,ASP對(duì)數(shù)據(jù)庫(kù)的操作非常得心應(yīng)手。你甚至可以像使用本地?cái)?shù)據(jù)庫(kù)那樣,管理遠(yuǎn)程主機(jī)上的數(shù)據(jù)庫(kù),對(duì)表格、記錄進(jìn)行各種操作。使用CDONTS(Collaboration Data Objects for NTS,NTS協(xié)作數(shù)據(jù)對(duì)象),可以發(fā)送、查看郵件,實(shí)現(xiàn)WEBMAIL的功能。結(jié)合WSH(Windows Scripting Host),可以實(shí)現(xiàn)對(duì)NT主機(jī)的管理,如NT用戶管理、IIS虛擬主機(jī)設(shè)置、EXCHANGE郵箱設(shè)置等等,就像管理本地機(jī)一樣方便。

PHP,一個(gè)嵌套的縮寫名稱,是英文超級(jí)文本預(yù)處理語(yǔ)言(PHP:Hypertext Preprocessor)的縮寫。PHP 是一種 HTML 內(nèi)嵌式的語(yǔ)言,PHP與微軟的ASP頗有幾分相似,都是一種在服務(wù)器端執(zhí)行的嵌入HTML文檔的腳本語(yǔ)言,語(yǔ)言的風(fēng)格有類似于C語(yǔ)言,現(xiàn)在被很多的網(wǎng)站編程人員廣泛的運(yùn)用。PHP 獨(dú)特的語(yǔ)法混合了 C、Java、Perl 以及 PHP 自創(chuàng)新的語(yǔ)法。它可以比 CGI 或者 Perl 更快速的執(zhí)行動(dòng)態(tài)網(wǎng)頁(yè)。用PHP做出的動(dòng)態(tài)頁(yè)面與其他的編程語(yǔ)言相比,PHP是將程序嵌入到HTML文檔中去執(zhí)行,執(zhí)行效率比完全生成HTML標(biāo)記的 CGI要高許多;與同樣是嵌入HTML文檔的腳本語(yǔ)言JavaScript相比,PHP在服務(wù)器端執(zhí)行,成分利用了服務(wù)器的性能;PHP執(zhí)行引擎還會(huì)將用戶經(jīng)常訪問(wèn)的PHP程序駐留在內(nèi)存中,其他用戶在一次訪問(wèn)這個(gè)程序時(shí)就不需要誠(chéng)信編譯程序了,只要直接執(zhí)行內(nèi)存中的代碼就可以了,這也是PHP高效率的體現(xiàn)之一。PHP具有非常強(qiáng)大的功能,所有的CGI或者JavaScript的功能PHP都能實(shí)現(xiàn),而且支持幾乎所有流行的數(shù)據(jù)庫(kù)以及操作系統(tǒng)。

PHP 最初是1994年Rasmus Lerdorf創(chuàng)建的,剛剛開(kāi)始只是一個(gè)簡(jiǎn)單的用Perl語(yǔ)言編寫的程序,用來(lái)統(tǒng)計(jì)他自己網(wǎng)站的訪問(wèn)者。后來(lái)又用C語(yǔ)言重新編寫,包括可以訪問(wèn)數(shù)據(jù)庫(kù)。在 1995年以Personal Home Page Tools (PHP Tools) 開(kāi)始對(duì)外發(fā)表第一個(gè)版本,Lerdorf寫了一些介紹此程序的文檔,并且發(fā)布了PHP1.0。在這早期的版本中,提供了訪客留言本、訪客計(jì)數(shù)器等簡(jiǎn)單的功能。以后越來(lái)越多的網(wǎng)站使用了PHP,并且強(qiáng)烈要且增加一些特性,比如循環(huán)語(yǔ)句和數(shù)組變量等等,在新的成員加入開(kāi)發(fā)行列之后,在1995年中, PHP2.0發(fā)布了。第二版定名為PHP/FI(Form Interpreter)。PHP/FI加入了對(duì)mSQL的支持,從此建立了PHP在動(dòng)態(tài)網(wǎng)頁(yè)開(kāi)發(fā)上的地位。到了1996年底,有15000個(gè)網(wǎng)站使用 PHP/FI;時(shí)間到了1997年中,使用PHP/FI的網(wǎng)站數(shù)字超過(guò)五萬(wàn)個(gè)。而在1997年中,開(kāi)始了第三版的開(kāi)發(fā)計(jì)劃,開(kāi)發(fā)小組加入了 Zeev Suraski 及 Andi Gutmans,而第三版就定名為PHP3。2000年,PHP4.0又問(wèn)世了,其中增加了許多新的特性。

PHP的特性包括:

開(kāi)放的源代碼:所有的PHP源代碼事實(shí)上都可以得到。

PHP是免費(fèi)的。

基于服務(wù)器端:由于PHP是運(yùn)行在服務(wù)器端的腳本,可以運(yùn)行在UNIX、LINUX、WINDOWS下。

嵌入HTML:因?yàn)镻HP可以嵌入HTML語(yǔ)言,所以學(xué)習(xí)起來(lái)并不困難。

簡(jiǎn)單的語(yǔ)言:PHP堅(jiān)持腳本語(yǔ)言為主,與Java以C++不同。

效率高:PHP消耗相當(dāng)少的系統(tǒng)資源。

圖像處理:用PHP動(dòng)態(tài)創(chuàng)建圖像

PHP 3與PHP 4的比較

PHP3跟Apache服務(wù)器緊密結(jié)合的特性;加上它不斷的更新及加入新的功能;而且?guī)缀踔С炙兄髁髋c非主流數(shù)據(jù)庫(kù);再以它能高速的執(zhí)行效率,使得 PHP在1999年中的使用站點(diǎn)已經(jīng)超過(guò)了150000萬(wàn)。加上它的源代碼完全公開(kāi),在 Open Source意識(shí)抬頭的今天,它更是這方面的中流砥柱。不斷地有新的函數(shù)庫(kù)加入,以及不停地更新的活力,使得PHP無(wú)論在UNIX、LINUX或是 Windows的平臺(tái)上都可以有更多新的功能。它提供豐富的函數(shù),使得在程序設(shè)計(jì)方面有著更好的支持。

PHP4.0整個(gè)腳本程序的核心大幅更動(dòng),讓程序的執(zhí)行速度,滿足更快的要求。在最佳化之后的效率,已較傳統(tǒng)CGI或者ASP等程序有更好的表現(xiàn)。而且還有更強(qiáng)的新功能、更豐富的函數(shù)庫(kù)。無(wú)論您接不接受,PHP 都將在 Web CGI 的領(lǐng)域上,掀起巔覆性的革命。對(duì)于一位專業(yè)的Web Master 而言,它將也是必修課程之一。

PHP 4.0是更有效的,更可靠的動(dòng)態(tài)Web頁(yè)開(kāi)發(fā)工具,在大多數(shù)情況運(yùn)行比 PHP 3.0要快,其腳本描述更強(qiáng)大并且更復(fù)雜, 最顯著的特征是速率比的增加。PHP4.0這些優(yōu)異的性能是PHP 腳本引擎重新設(shè)計(jì)產(chǎn)生的結(jié)果:引擎由 AndiGutmans 和 Zeev Suraski從底層全面重寫。PHP4.0 腳本引擎 ——Zend 引擎,使用了一種更有效的編譯——執(zhí)行方式, 而不是PHP 3.0 采用的執(zhí)行 ——當(dāng)解析時(shí)模型。

PHP4在3.0版的基礎(chǔ)上增加或增強(qiáng)了許多有用的特征,主要如下:

(1)別名:在PHP4中,可以利用引用為變量賦值,這給編程帶來(lái)了很大的靈活性。

(2)擴(kuò)充了API 模塊:PHP 4.0 為擴(kuò)展的 API 模塊的提供了擴(kuò)展PHP接口模塊, 它比舊的 API 版本顯著地快。 PHP 模塊已有的及最常用的接口多數(shù)被轉(zhuǎn)換到使用這個(gè)擴(kuò)展的接口。

(3)自動(dòng)資源釋放:PHP4增加了引用計(jì)數(shù)功能,這種新技術(shù)的引入使PHP4具有了自動(dòng)內(nèi)存管理功能,減輕了開(kāi)發(fā)人員的負(fù)擔(dān)。

(4)布爾類型:PHP 4.0 支持布爾類型。

(5)進(jìn)程生成:在 UNIX 環(huán)境下的 PHP 4.0 提供了一個(gè)很智能和通用的生成進(jìn)程, 使用了一種名為基于automake/libtool的系統(tǒng)生成技術(shù)。

(6)COM/DCOM 支持:PHP 4.0 提供 COM/DCOM 支持 ( 僅用于Windows 環(huán)境 ) 可以無(wú)縫地存取和訪問(wèn) COM 對(duì)象。

(7)與PHP 3.0 兼容性很好:PHP 4.0 是與 PHP 3.0 代碼向后兼容性接近100% 。由于 PHP 4 的改進(jìn)的體系結(jié)構(gòu),兩者有一些細(xì)微的差別,但是大多數(shù)人將可能永遠(yuǎn)不可能遇上這種情況。

PHP介紹

(8)配置:PHP4重新設(shè)計(jì)和增強(qiáng)了PHP。ini文件,這使得用PHP。ini來(lái)配置PHP顯得極為容易,這個(gè)文件可以在運(yùn)行時(shí)被Apache(unix系統(tǒng))或由Windows 注冊(cè)(Windows 環(huán)境)。

(9)加密支持:PHP4實(shí)現(xiàn)了完整的加密, 這些加密功能是一個(gè)完整的mycrypt庫(kù),并且 PHP 4.0 支持哈希函數(shù)。Blowfish,TripleDES,MD5,并且SHA1 也是可使用的一些加密算法。

(10)類型檢查:PHP 4.0 支持同一操作符用于評(píng)類型檢查:===( 3 等號(hào)運(yùn)算符 ), 為在兩個(gè)值和其類型之間作檢查。例如, 3 ===3 將視為假 ( 類型是不同的 ), 而 3 ==3 ( 相等判斷 ) 將視為真。

(11)FTP 支持:PHP 4.0 支持 FTP 。通常, 你會(huì)為通過(guò)一個(gè)調(diào)制解調(diào)器連接下載一個(gè)大文件提供一個(gè)接口。然而, 如果你確實(shí)有需要,可以使用PHP 。

(12)PHP4新增函數(shù)或功能增強(qiáng)函數(shù):PHP 4.0 新增了許多函數(shù),同時(shí)也將許多現(xiàn)有的函數(shù)功能進(jìn)行了增強(qiáng),以下是一些例子。 array_count_values() eval() foreach() nclude() ob_end_clean() ob_end_flush() ob_get_contents() ob_start() strip_tags() unset()

(13)here打?。篜HP 4.0 的Here打印是與Perl類似的, 盡管完全不相同。Here是打印大容量文章的一個(gè)有用的方法,例如在 HTML文件中,不會(huì)漏掉任何一個(gè)字符,例如目錄標(biāo)記。

(14)HTTP Session fallback 系統(tǒng):為 HTTP Session管理的一個(gè) fallback 系統(tǒng)在 PHP 4.0被實(shí)現(xiàn)。缺省情況下,Session標(biāo)識(shí)符由cookies存儲(chǔ)。如果沒(méi)有cookies支持或一項(xiàng)cookies任務(wù)失敗,Session標(biāo)識(shí)符自動(dòng)被創(chuàng)建并在 URL 的查詢字符串中被攜帶。

(15)ISAPI 支持:PHP 4.0 能作為一個(gè)個(gè)性化的 ISAPI 模塊作為 IIS插件 。這比 PHP 3.0 更有效, 它作為一個(gè)外部的程序來(lái)運(yùn)行。

(16)內(nèi)存:PHP 4.0 能更有效的使用內(nèi)存, 導(dǎo)致較少的內(nèi)存占用消耗,這主要?dú)w功于引用計(jì)數(shù)技術(shù)的實(shí)現(xiàn)。

(17)其他類成員函數(shù):在 PHP 4.0 你能在成員函數(shù)本身的作用域或全局范圍內(nèi)調(diào)用其他類的成員函數(shù)。例如,你能用一個(gè)子函數(shù)覆蓋父函數(shù),并在子函數(shù)中調(diào)用父函數(shù)。

(18)多維數(shù)組:在 PHP 4.0 ,利用GET,POST,Cookies的進(jìn)行的數(shù)據(jù)傳輸支持多維數(shù)組。

(19)個(gè)性化的 HTTP Session支持:HTTP Session處理, 包括 fallback 系統(tǒng)管理,在 PHP 4.0被它的新庫(kù)函數(shù)實(shí)現(xiàn) 。在版本 3.0 中處理Session要求使用 PHPLIB 和第三方的庫(kù)函數(shù), 它比把Session直接地由 PHP 支持慢了許多。

(20)個(gè)性化的 Java 支持:PHP 4.0 支持和java的交互。這種個(gè)性化的Java 支持為PHP 在 Java 對(duì)象上創(chuàng)建和使用方法提供一個(gè)簡(jiǎn)單并且有效的工具。

21)對(duì)象和數(shù)嵌套組:PHP 4.0 實(shí)現(xiàn)了功能更加強(qiáng)大的對(duì)象, 移去了 PHP 3.0存在的種種句法限制。對(duì)象能在數(shù)組以內(nèi)被嵌套并且反過(guò)來(lái)也如此, 可以根據(jù)你的需要實(shí)現(xiàn)嵌套。

(22)面向?qū)ο蟮木幊蹋篜HP 4.0 為面向?qū)ο蟮木幊毯蜆?gòu)造類及對(duì)象提供擴(kuò)展的功能和新特征。PHP4實(shí)現(xiàn)了對(duì)象重載,引用技術(shù)等新技術(shù)。

(23)對(duì)象重載支持:對(duì)象重載語(yǔ)法允許第三方的基于面向?qū)ο蟮念悗?kù)使用 PHP4 的面向?qū)ο蟮奶卣鞔嫒∷麄冏陨淼墓δ?。使用這個(gè)特征的一個(gè) COM 模塊已經(jīng)被實(shí)現(xiàn)了。

(24)輸出緩沖支持:PHP 提供了一個(gè)輸出緩沖函數(shù)集合。輸出緩沖支持允許你寫包裹函數(shù)功能壓縮緩沖區(qū)。在 PHP4 的輸出緩沖支持允許 HTML 頭信息存放, 無(wú)論 HTML的正文是否輸出。頭信息( (header(), content type, and cookies ) 不采用緩沖 。

(25)增加了PCRE 庫(kù):PHP 4.0 包括一個(gè) Perl 兼容的正則表達(dá)式 (PCRE ) 庫(kù), 和正常regex庫(kù)一起與 PHP 綁定。split 和replace PCRE 功能被支持。PCRE 和 Perl 正規(guī)表達(dá)式之間有一些細(xì)微差別。

(26)PHP.ini 文件:PHP.ini文件在 PHP4.0 被重新設(shè)計(jì), 使用的 PHP 的配置PHP.ini是更容易并且更有效的。全部文件能被Apache 在運(yùn)行時(shí)間操作 ( 在 Apache環(huán)境 下 ) 或由 Windows 注冊(cè)表 ( 在 Windows 下面 ) 。被加入PHP.ini文件的配置指令自動(dòng)地在所有相關(guān)的模塊中被支持。

(27)引用計(jì)數(shù):PHP 4.0 為系統(tǒng)中的每個(gè)數(shù)值提供了引用計(jì)數(shù), 包括資源。一旦一個(gè)資源不再被任何變量引用,它自動(dòng)地被釋放以節(jié)省內(nèi)存資源。利用這個(gè)特征的最明顯的例子一個(gè)內(nèi)置SQL查詢的循環(huán)語(yǔ)句。在PHP 3.0中 ,每次遞歸另外的 SQL 結(jié)果集合重復(fù)申請(qǐng)內(nèi)存,直到腳本執(zhí)行完畢,這些結(jié)果集合占用的內(nèi)存才被釋放。

(28)支持引用:通過(guò)引用可以改變一個(gè)變量的值。

(29)函數(shù)的運(yùn)行時(shí)綁定:PHP 4.0 的運(yùn)行時(shí)間綁定功能允許你在他們被聲明以前調(diào)用, 無(wú)論聲明是否在代碼以后或是在運(yùn)行時(shí)間。

(30)類的運(yùn)行時(shí)信息:PHP 4.0 支持在運(yùn)行時(shí)刻存取下列類信息:一個(gè)對(duì)象的類名,一個(gè)對(duì)象的父類的類名字,以及對(duì)象函數(shù)所在的名字。

(31)服務(wù)器抽象層:為支持Web服務(wù)器提供了增強(qiáng)型 SAPI ( 服務(wù)器 API ) 接口,是 PHP 4。0 不可分的一部分。這個(gè)服務(wù)器抽象層,提供了通用的WEB服務(wù)器接口支持,支持多線程WEB服務(wù)器,為大多數(shù)的WEB服務(wù)器提供透明的支持, 這些服務(wù)器包括 Apache ,IIS ( ISAPI ), 以及 AOL 服務(wù)器。

程序界面 PHP ASP

操作系統(tǒng) 均可 Win32

Web服務(wù)器 數(shù)種 IIS

執(zhí)行效率 快 快

穩(wěn)定性 佳 中等

開(kāi)發(fā)時(shí)間 短 短

修改時(shí)間 短 短

程序語(yǔ)言 PHP VB

網(wǎng)頁(yè)結(jié)合 佳 佳

學(xué)習(xí)門檻 低 低

函數(shù)支持 多 少

系統(tǒng)安全 佳 極差

使用網(wǎng)站 超多 多

改版速度 快 慢

php中怎么把數(shù)據(jù)庫(kù)連接寫成一個(gè)接口

我自己封裝的一個(gè)

?php

class AppConfig{

public static $dbParam = array(

'dbHost' = 'localhost',

'dbUser' = 'root',

'dbPassword' ='',

'dbName' = '數(shù)據(jù)庫(kù)名',

'dbCharset' = 'utf8',

'dbPort' = 3306,

'dbPrefix' = 'test_',

'dbPconnect' = 0,

'dbDebug' = true,

);

}

class Model {

private $version = ''; //mysql版本

private $config = array(); //數(shù)據(jù)庫(kù)配置數(shù)組

private $class; //當(dāng)前類名

public $tablepre = 'ts_'; //表前綴

public $db = ''; //庫(kù)名

public $table = ''; //表名

private static $link; //數(shù)據(jù)庫(kù)鏈接句柄

private $data = array(); //中間數(shù)據(jù)容器

private $condition = ''; //查詢條件

private $fields = array(); //字段信息

private $sql = array(); //sql集合,調(diào)試用

public $primaryKey = 'id'; //表主鍵

//構(gòu)造函數(shù)初始化

public function __construct($dbParam = array()) {

$this-config = (is_array($dbParam) !empty($dbParam)) ? $dbParam : AppConfig::$dbParam;

$this-connect();

$this-init();

}

//鏈接數(shù)據(jù)庫(kù)

private function connect() {

if($this-config['dbPconnect']) {

self::$link = @mysql_pconnect($this-config['dbHost'], $this-config['dbUser'], $this-config['dbPassword']);

}else{

self::$link = @mysql_connect($this-config['dbHost'], $this-config['dbUser'], $this-config['dbPassword'], true);

}

mysql_errno(self::$link) != 0 $this-errdie('Could not connect Mysql: ');

$this-db= !empty($this-db) ? $this-db : $this-config['dbName'];

$serverinfo = $this-version();

if ($serverinfo '4.1' $this-config['dbCharset']) {

mysql_query("SET character_set_connection=".$this-config['dbCharset'].",character_set_results=".$this-config['dbCharset'].",character_set_client=binary", self::$link);

}

if ($serverinfo '5.0') {

mysql_query("SET sql_mode=''", self::$link);

}

@mysql_select_db($this-db, self::$link) or $this-errdie('Cannot use database');

return self::$link;

}

//表基本信息初始化

protected function init() {

$this-class = get_class($this);

$this-table = !empty($this-table) ? $this-table : strtolower($this-class);

$this-table = $this-tablepre . $this-table;

return $this;

}

//設(shè)置屬性值

public function __set($name, $value) {

//exit($value);

$this-data['fields'][$name] = $value;

}

//獲取屬性值

public function __get($name) {

if(isset($this-data['fields'][$name])) {

return($this-data['fields'][$name]);

}else {

return NULL;

}

}

//字段信息處理

private function implodefields($data) {

if (!is_array($data)) {

$data = array();

}

$this-fields = !empty($this-data['fields']) ? array_merge($this-data['fields'], $data) : $data;

foreach($this-fields as $key = $value) {

$fieldsNameValueStr[] = "`$key`='$value'";

$fieldsNameStr[] = "`$key`";

$fieldsValueStr[] = "'$value'";

}

return array($fieldsNameValueStr, $fieldsNameStr, $fieldsValueStr);

}

//條件判斷組裝

private function condition($where = NULL) {

if (is_numeric($where)) {

$where = "WHERE `{$this-primaryKey}`='{$where}' LIMIT 1";

}elseif (is_array($where)){

$where = "WHERE `{$this-primaryKey}` in (".implode(',',$where).")";

}elseif(!empty($this-data['condition'])){

//'預(yù)留WHERE', 'order', 'group', 'limit' …………等條件關(guān)鍵詞處理接口

$where = $where ? "WHERE {$where}" : "WHERE 1";

isset($this-data['condition']['where']) $where .= ' AND '.$this-data['condition']['where'];

isset($this-data['condition']['group']) $where .= ' GROUP BY '.$this-data['condition']['group'];

isset($this-data['condition']['order']) $where .= ' ORDER BY '.$this-data['condition']['order'];

isset($this-data['condition']['limit']) $where .= ' LIMIT '.$this-data['condition']['limit'];

}else{

$where = "WHERE {$where}";

}

$this-condition = $where;

return $this;

}

//插入數(shù)據(jù)

public function insert($data = array(), $replace = false) {

$fields = $this-implodefields($data);

$insert = $replace ? 'REPLACE' : 'INSERT';

$sql = "{$insert} INTO `{$this-db}`.`{$this-table}` (".implode(', ',$fields[1]).") values (".implode(', ',$fields[2]).")";

$this-query($sql);

return $this-getInsertId();

}

//更新數(shù)據(jù)

public function update($data = array() ,$where = '') {

$numargs = func_num_args();

if ($numargs == 1) {

$where = $data;

$data = array();

}

$fields = $this-implodefields($data);

$this-condition($where);

$sql = "UPDATE `{$this-db}`.`{$this-table}` SET ".implode(', ',$fields[0])." {$this-condition}";

$this-query($sql);

return $this-getAffectedRows();

}

//刪除數(shù)據(jù)

public function delete($where = NULL) {

if(!is_array($where) strtolower(substr(trim($where), 0, 6)) == 'delete'){

$sql = $where;

}else{

$this-condition($where);

$sql = "DELETE FROM `{$this-db}`.`{$this-table}` {$this-condition}";

}

$this-query($sql);

return $this-getAffectedRows();

}

//查詢數(shù)據(jù)

public function select($where = NULL, $fields = '*') {

if(!is_array($where) strtolower(substr(trim($where), 0, 6)) == 'select'){

$sql = $where;

}else{

$this-condition($where);

$sql = "SELECT {$fields} FROM `{$this-db}`.`{$this-table}` {$this-condition}";

}

return $this-fetch($this-query($sql));

}

//查詢一條數(shù)據(jù)

public function getOne($where, $fields = '*') {

$data = $this-select($where, $fields = '*');

if($data) {

return $data[0];

}

return array();

}

//查詢多條數(shù)據(jù)

public function getAll($where, $fields = '*') {

$data = $this-select($where, $fields = '*');

return $data;

}

//結(jié)果數(shù)量

public function getCount($where = '', $fields = '*') {

$this-condition($where);

$sql = "SELECT count({$fields}) as count FROM `{$this-db}`.`{$this-table}` {$this-condition}";

$data = $this-query($sql);

if($data){

return @mysql_result($data,0);

}

return 0;

}

//執(zhí)行sql語(yǔ)句(flag為0返回mysql_query查詢后的結(jié)果,為1返回lastid,其他返回影響行數(shù),默認(rèn)為2返回影響行數(shù))

public function query($sql, $flag = '0', $type = '') {

if ($this-config['dbDebug']) {

$startime = $this-microtime_float();

}

//查詢

if ($type == 'UNBUFFERED' function_exists('mysql_unbuffered_query')) {

$result = @mysql_unbuffered_query($sql, self::$link);

} else {

//exit($sql);

$result = @mysql_query($sql, self::$link);

}

//重試

if (in_array(mysql_errno(self::$link), array(2006,2013)) empty($result) $this-config['dbPconnect']==0 !defined('RETRY')) {

define('RETRY',true); @mysql_close(self::$link); sleep(2);

$this-connect();

$result = $this-query($sql);

}

if ($result === false) {

$this-errdie($sql);

}

if ($this-config['dbDebug']) {

$endtime = $this-microtime_float();

$this-sql[] = array($sql,$endtime-$startime);

}

//清空操作數(shù)據(jù)

$this-data = array();

return $flag == '0' ? $result : ($flag == '1' ? $this-getInsertId() : $this-getAffectedRows());

}

//返回結(jié)果$onlyone為true返回一條否則返回所有,$type有MYSQL_ASSOC,MYSQL_NUM,MYSQL_BOTH

public function fetch($result, $onlyone = false, $type = MYSQL_ASSOC) {

if($result){

if ($onlyone) {

$row = @mysql_fetch_array($result, $type);

return $row;

}else{

$rowsRs = array();

while($row=@mysql_fetch_array($result, $type)) {

$rowsRs[] = $row;

}

return $rowsRs;

}

}

return array();

}

//可以運(yùn)行SELECT,SHOW,EXPLAIN 或 DESCRIBE 等返回一個(gè)資源標(biāo)識(shí)符的語(yǔ)句得到返回結(jié)果數(shù)組

public function show($sql, $onlyone = false) {

return $this-fetch($this-query($sql), $onlyone);

}

// 使用call函數(shù)處理同類型函數(shù)

private function __call($name, $arguments) {

$callArr = array('on', 'where', 'order', 'between', 'group', 'limit');

if (in_array($name, $callArr)) {

$this-data['condition'][$name] = $arguments[0];

}else{

$this-errdie("function error: function {$name} is not in ($this-class) class exist");

}

return $this;

}

//返回最后一次插入ID

public function getInsertId() {

return @mysql_insert_id(self::$link);

}

//返回受影響行數(shù)

public function getAffectedRows() {

return @mysql_affected_rows(self::$link);

}

//獲取錯(cuò)誤信息

private function error() {

return ((self::$link) ? @mysql_error(self::$link) : @mysql_error());

}

//獲取錯(cuò)誤信息ID

private function errno() {

return ((self::$link) ? @mysql_errno(self::$link) : @mysql_errno());

}

//獲取版本信息

function version() {

if(empty($this-version)) {

$this-version = mysql_get_server_info(self::$link);

}

return $this-version;

}

//打印錯(cuò)誤信息

private function errdie($sql = '') {

if ($this-config['dbDebug']) {

die('/BRBMySQL ERROR/B/BR

SQL:'.$sql.'/BR

ERRNO:'.$this-errno().'/BR

ERROR:'.$this-error().'/BR');

}

die('DB ERROR?。?!');

}

//獲取時(shí)間微妙數(shù)

private function microtime_float()

{

list($usec, $sec) = explode(" ", microtime());

return ((float)$usec + (float)$sec);

}

//析構(gòu)函數(shù)

public function __destruct() {

echo 'hr';

$this-config['dbDebug'] print_r($this-sql);

//unset($this-result);

//unset($this-condition);

//unset($this-data);

}

}

class user extends Model {

//public $db = 'qsf_mvc';

//public $table = 'user';

public $primaryKey = 'uid';

}

$userObj = new user();

//---------------------------------------插入數(shù)據(jù)方法一-----------------------------------------

//模擬ActiveRecord模式 插入數(shù)據(jù)

$userObj-username = 'hoho';

$userObj-passwd = '1478522';

$userObj-email = 'qsf.z11@163.com';

$userObj-sex = 1;

$userObj-desc = '清潔工';

$insetId = $userObj-insert();

if ($insetId 0) {

echo "插入ID為:{$insetId}BR";

}

//---------------------------------------插入數(shù)據(jù)方法二-----------------------------------------

//直接數(shù)組做參數(shù)插入數(shù)據(jù)

$userArr = array(

'username' = 'hoho',

'passwd' = '1478522',

'email' = 'qsf.z2121ia@163.com',

'sex' = '1',

'desc' = '廚師',

);

$insetId = $userObj-insert($userArr);

if ($insetId 0) {

echo "插入ID為:{$insetId}BR";

}

//---------------------------------------更新數(shù)據(jù)方法一----------------------------------------

$userObj-username = 'h111oho';

$userObj-passwd = '1478511122';

$userObj-email = 'qsf111ia@163.com';

$userObj-sex = 1;

$userObj-desc = '清潔工';

$affectedRows1 = $userObj-update(89);

if ($affectedRows1 0) {

echo "影響行數(shù)為:{$affectedRows1}BR";

}

//---------------------------------------更新數(shù)據(jù)方法二----------------------------------------

//更新記錄(傳遞參數(shù)的方式和insert操作一樣)

$userArr = array(

'username' = 'hohoho',

'passwd' = '1474rr4448522',

'email' = 'qsf.rrza@165.com',

'sex' = '0',

'desc' = '廚師qq',

);

$affectedRows = $userObj-update($userArr, $insetId);

if ($affectedRows 0) {

echo "影響行數(shù)為:{$affectedRows}BR";

}

//----------------------------------------查詢數(shù)據(jù)----------------------------------------------

$userRs0 = $userObj-select(8); //單個(gè)主鍵值

//print_r($userRs0);

$userRs1 = $userObj-select(array(1,5,8)); //多個(gè)主鍵值的數(shù)組

//print_r($userRs1);

$userRs2 = $userObj-select('select count(*) as count from user where uid 20'); //直接完整sql語(yǔ)句

//print_r($userRs2);

$userRs3 = $userObj-select("`uid` 0"); //where條件

//print_r($userRs3);

$userRs4 = $userObj-getOne("`uid` 0"); //獲取單條記錄

//print_r($userRs4);

$usersRs5 = $userObj-getAll("`uid` 0"); ////獲取所有記錄

//print_r($usersRs5);

$usersRs6 = $userObj-limit('0,10')-where('uid 100')-order('uid DESC')-group('username')-select();

//print_r($usersRs6);

//----------------------------------------刪除數(shù)據(jù)-----------------------------------------------

//刪除操作傳遞參數(shù)的方式和select操作一樣

$userObj-delete(60); //單個(gè)主鍵值

$userObj-delete(array(1,5,8)); //多個(gè)主鍵值的數(shù)組

$userObj-delete('delete from user where uid 100'); //直接完整sql語(yǔ)句

$userObj-delete("`uid` 100"); //where條件

$userObj-limit('5')-where('uid 80')-delete();

//----------------------------------------特殊查詢-----------------------------------------------

$userShowRs = $userObj-show('show create table user', true); //獲取特殊查詢的結(jié)果,第二個(gè)參數(shù)代表返回一條結(jié)果還是所有的結(jié)果

幾種常用PHP連接數(shù)據(jù)庫(kù)的代碼示例

PHP連接數(shù)據(jù)庫(kù)之PHP連接MYSQL數(shù)據(jù)庫(kù)代碼

?php???

$mysql_server_name='localhost';?

//改成自己的mysql數(shù)據(jù)庫(kù)服務(wù)器??

$mysql_username='root';?

//改成自己的mysql數(shù)據(jù)庫(kù)用戶名??

$mysql_password='12345678';?

//改成自己的mysql數(shù)據(jù)庫(kù)密碼??

$mysql_database='mycounter';

//改成自己的mysql數(shù)據(jù)庫(kù)名??

$conn=mysql_connect($mysql_server_name,

$mysql_username,$mysql_password,

$mysql_database);???

$sql='CREATE?DATABASE?mycounter?

DEFAULT?CHARACTER?SET?gbk?COLLATE?gbk_chinese_ci;???

';???

mysql_query($sql);???

$sql='CREATE?TABLE?`counter`?

(`id`?INT(255)?UNSIGNED?NOT?NULL?

AUTO_INCREMENT?,`count`?INT(255)?

UNSIGNED?NOT?NULL?DEFAULT?0,PRIMARY?KEY?

(?`id`?)?)?TYPE?=?innodb;';???

mysql_select_db($mysql_database,$conn);???

$result=mysql_query($sql);???

//echo?$sql;???

mysql_close($conn);???

echo?"Hello!數(shù)據(jù)庫(kù)mycounter已經(jīng)成功建立!";???

??

PHP連接數(shù)據(jù)庫(kù)之PHP連接ACCESS數(shù)據(jù)庫(kù)代碼方法

???

$conn?=?new?com("ADODB.Connection");???

$connstr?=?"DRIVER={Microsoft

Access?Driver?(*.mdb)};?

DBQ=".?realpath("data/db.mdb");???

$conn-Open($connstr);???

$rs?=?new?com("ADODB.RecordSet");???

$rs-Open("select?*

from?szd_t",$conn,1,1);???

while(!?$rs-eof)?{???

$f?=?$rs-Fields(1);???

echo?$f-value;???

$rs-MoveNext();???

}???

?

文章題目:php編程數(shù)據(jù)庫(kù)接口 php接口開(kāi)發(fā)示例代碼
本文地址:http://www.muchs.cn/article6/hphgig.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站建設(shè)云服務(wù)器、全網(wǎng)營(yíng)銷推廣、App開(kāi)發(fā)動(dòng)態(tài)網(wǎng)站、網(wǎng)站設(shè)計(jì)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

微信小程序開(kāi)發(fā)