用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)題了。
從字面上說(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)站 超多 多
改版速度 快 慢
我自己封裝的一個(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連接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)