版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
PDO數(shù)據(jù)庫(kù)抽象層本講大綱:1PDO概述2通過(guò)PDO連接數(shù)據(jù)庫(kù)3執(zhí)行SQL語(yǔ)句4獲取結(jié)果集PDO概述PDO是PHPDateObject(PHP數(shù)據(jù)對(duì)象)的簡(jiǎn)稱,它是與PHP5.1版本一起發(fā)行的,目前支持的數(shù)據(jù)庫(kù)包括Firebird、FreeTDS、Interbase、MySQL、MSSQLServer、ODBC、Oracle、PostgreSQL、SQLite和Sybase。有了PDO,您不必再使用mysql_*函數(shù)、oci_*函數(shù)或者mssql_*函數(shù),也不必再為它們封裝數(shù)據(jù)庫(kù)操作類,只需要使用PDO接口中的方法就可以對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作。在選擇不同的數(shù)據(jù)庫(kù)時(shí),只需修改PDO的DSN(數(shù)據(jù)源名稱)。在PHP6中將默認(rèn)使用PDO連接數(shù)據(jù)庫(kù),所有非PDO擴(kuò)展將會(huì)在PHP6中被移除。該擴(kuò)展提供PHP內(nèi)置類PDO來(lái)對(duì)數(shù)據(jù)庫(kù)進(jìn)行訪問(wèn),不同數(shù)據(jù)庫(kù)使用相同的方法名,解決數(shù)據(jù)庫(kù)連接不統(tǒng)一的問(wèn)題。通過(guò)PDO連接數(shù)據(jù)庫(kù)(1)
1.PDO構(gòu)造函數(shù)在PDO中,要建立與數(shù)據(jù)庫(kù)的連接需要實(shí)例化PDO的構(gòu)造函數(shù),PDO構(gòu)造函數(shù)的語(yǔ)法如下:__construct(string$dsn[,string$username[,string$password[,array$driver_options]]])構(gòu)造函數(shù)的參數(shù)說(shuō)明如下:dsn:數(shù)據(jù)源名,包括主機(jī)名端口號(hào)和數(shù)據(jù)庫(kù)名稱。username:連接數(shù)據(jù)庫(kù)的用戶名。password:連接數(shù)據(jù)庫(kù)的密碼。driver_options:連接數(shù)據(jù)庫(kù)的其他選項(xiàng)。通過(guò)PDO連接MySQL數(shù)據(jù)庫(kù)的代碼如下:<?php
通過(guò)PDO連接數(shù)據(jù)庫(kù)(2)header("Content-Type:text/html;charset=utf-8"); //設(shè)置頁(yè)面的編碼格式 $dbms='mysql'; //數(shù)據(jù)庫(kù)類型 $dbName='db_database05'; //使用的數(shù)據(jù)庫(kù)名稱 $user='root'; //使用的數(shù)據(jù)庫(kù)用戶名 $pwd='111'; //使用的數(shù)據(jù)庫(kù)密碼 $host='localhost'; //使用的主機(jī)名稱 $dsn="$dbms:host=$host;dbname=$dbName"; try{ 通過(guò)PDO連接數(shù)據(jù)庫(kù)(3) //捕獲異常 $pdo=newPDO($dsn,$user,$pwd); //實(shí)例化對(duì)象 echo"PDO連接MySQL成功"; }catch(Exception$e){ echo$e->getMessage()."<br>"; }?>
2.DSN詳解DSN是DataSourceName(數(shù)據(jù)源名稱)的首字母縮寫。DSN提供連接數(shù)據(jù)庫(kù)需要的信息。PDO的DSN包括3部分:PDO驅(qū)動(dòng)名稱(例如:mysql、sqlite或者pgsql);冒號(hào)和驅(qū)動(dòng)特定的語(yǔ)法。每種數(shù)據(jù)庫(kù)都有其特定的驅(qū)動(dòng)語(yǔ)法。
通過(guò)PDO連接數(shù)據(jù)庫(kù)(4)在使用不同的數(shù)據(jù)庫(kù)時(shí),必須明確數(shù)據(jù)庫(kù)服務(wù)器是完全獨(dú)立于PHP的是實(shí)體。雖然筆者在講解本書的內(nèi)容時(shí),數(shù)據(jù)庫(kù)服務(wù)器和Web服務(wù)器是在同一臺(tái)計(jì)算機(jī)上,但是實(shí)際的情況可能不是如此。數(shù)據(jù)庫(kù)服務(wù)器可能與Web服務(wù)器不是在同一臺(tái)計(jì)算機(jī)上,此時(shí)要通過(guò)PDO連接數(shù)據(jù)庫(kù)時(shí),就需要修改DSN中的主機(jī)名稱。由于數(shù)據(jù)庫(kù)服務(wù)器只在特定的端口上監(jiān)聽(tīng)連接請(qǐng)求。每種數(shù)據(jù)庫(kù)服務(wù)器具有一個(gè)默認(rèn)的端口號(hào)(MySQL是3306),但是數(shù)據(jù)庫(kù)管理員可以對(duì)端口號(hào)進(jìn)行修改,因此有可能PHP找不到數(shù)據(jù)庫(kù)的端口,此時(shí)就可以在DSN中包含端口號(hào)。另外由于一個(gè)數(shù)據(jù)庫(kù)服務(wù)器中可能擁有多個(gè)數(shù)據(jù)庫(kù),所以在通過(guò)DSN連接數(shù)據(jù)庫(kù)時(shí),通常都包括數(shù)據(jù)庫(kù)名稱,這樣可以確保連接的是您想要的數(shù)據(jù)庫(kù),而不是其他人的數(shù)據(jù)庫(kù)。執(zhí)行SQL語(yǔ)句(1)1.exec()方法exec()方法返回執(zhí)行后受影響的行數(shù),其語(yǔ)法如下:intPDO::exec(stringstatement)參數(shù)statement是要執(zhí)行的SQL語(yǔ)句。該方法返回執(zhí)行查詢時(shí)受影響的行數(shù),通常用于INSERT、DELETE和UPDATE語(yǔ)句中。2.query()方法query()方法通過(guò)用于返回執(zhí)行查詢后的結(jié)果集。其語(yǔ)法如下:PDOStatementPDO::query(stringstatement)參數(shù)statement是要執(zhí)行的SQL語(yǔ)句。它返回的是一個(gè)PDOStatement對(duì)象。3.預(yù)處理語(yǔ)句——prepare()和execute()
執(zhí)行SQL語(yǔ)句(2)預(yù)處理語(yǔ)句包括prepare()和execute()兩個(gè)方法。首先,通過(guò)prepare()方法做查詢的準(zhǔn)備工作,然后,通過(guò)execute()方法執(zhí)行查詢。并且還可以通過(guò)bindParam()方法來(lái)綁定參數(shù)提供給execute()方法。其語(yǔ)法如下:PDOStatementPDO::prepare(stringstatement[,arraydriver_options])boolPDOStatement::execute([arrayinput_parameters])表5-2 fetch_style控制結(jié)果集的可選值值說(shuō)明PDO::FETCH_ASSOC關(guān)聯(lián)數(shù)組形式PDO::FETCH_NUM數(shù)字索引數(shù)組形式PDO::FETCH_BOTH兩者數(shù)組形式都有,這是缺省的PDO::FETCH_OBJ按照對(duì)象的形式,類似于以前的mysql_fetch_object()PDO::FETCH_BOUND以布爾值的形式返回結(jié)果,同時(shí)將獲取的列值賦給bindParam()方法中指定的變量PDO::FETCH_LAZY以關(guān)聯(lián)數(shù)組、數(shù)字索引數(shù)組和對(duì)象3種形式返回結(jié)果執(zhí)行SQL語(yǔ)句(3)參數(shù)cursor_orientation:PDOStatement對(duì)象的一個(gè)滾動(dòng)游標(biāo),可用于獲取指定的一行。
參數(shù)cursor_offset:游標(biāo)的偏移量。【例5-5】通過(guò)fetch()方法獲取結(jié)果集中下一行的數(shù)據(jù),進(jìn)而應(yīng)用while語(yǔ)句完成數(shù)據(jù)庫(kù)中數(shù)據(jù)的循環(huán)輸出,具體步驟如下。(實(shí)例位置:光盤\MR\源碼\第5章\5-5)創(chuàng)建index.php文件,設(shè)計(jì)網(wǎng)頁(yè)頁(yè)面。首先,通過(guò)PDO連接MySQL數(shù)據(jù)庫(kù)。然后,定義SELECT查詢語(yǔ)句,應(yīng)用prepare和execute方法執(zhí)行查詢操作。接著,通過(guò)fetch()方法返回結(jié)果集中下一行數(shù)據(jù),同時(shí)設(shè)置結(jié)果集以關(guān)聯(lián)數(shù)組形式返回。最后,通過(guò)while語(yǔ)句完成數(shù)據(jù)的循環(huán)輸出。其關(guān)鍵代碼如下:<?php執(zhí)行SQL語(yǔ)句(4)$dbms='mysql'; //數(shù)據(jù)庫(kù)類型,對(duì)于開發(fā)者來(lái)說(shuō),使用不同的數(shù)據(jù)庫(kù),只要改這個(gè),不用記住那么多的函數(shù)$host='localhost'; //數(shù)據(jù)庫(kù)主機(jī)名$dbName='db_database05'; //使用的數(shù)據(jù)庫(kù)$user='root'; //數(shù)據(jù)庫(kù)連接用戶名$pass='111'; //對(duì)應(yīng)的密碼$dsn="$dbms:host=$host;dbname=$dbName";try{$pdo=newPDO($dsn,$user,$pass);//初始化一個(gè)PDO對(duì)象,就是創(chuàng)建了數(shù)據(jù)庫(kù)連接對(duì)象$pdo $query="select*fromtb_pdo_mysql"; //定義SQL語(yǔ)句 $result=$pdo->prepare($query); //準(zhǔn)備查詢語(yǔ)句 $result->execute(); 執(zhí)行SQL語(yǔ)句(5)//執(zhí)行查詢語(yǔ)句,并返回結(jié)果集 while($res=$result->fetch(PDO::FETCH_ASSOC)){ //循環(huán)輸出查詢結(jié)果集,并且設(shè)置結(jié)果集的為關(guān)聯(lián)索引 ?> <tr><tdheight="22"align="center"valign="middle"><?phpecho$res['id'];?></td><tdalign="center"valign="middle"><?phpecho$res['pdo_type'];?></td><tdalign="center"valign="middle"><?phpecho$res['database_name'];?></td><tdalign="center"valign="middle"><?phpecho$res['dates'];?></td><tdalign="center"valign="middle"><ahref="#">刪除</a></td></tr><?php執(zhí)行SQL語(yǔ)句(6)}}catch(PDOException$e){die("Error!:".$e->getMessage()."<br/>");}?>運(yùn)行結(jié)果如圖5-10所示。圖5-10fetch()方法獲取查詢結(jié)果集執(zhí)行SQL語(yǔ)句(7)
2.fetchAll()方法fetchAll()方法獲取結(jié)果集中的所有行。其語(yǔ)法如下:arrayPDOStatement::fetchAll([intfetch_style[,intcolumn_index]])參數(shù)fetch_style:控制結(jié)果集中數(shù)據(jù)的顯示方式。參數(shù)column_index:字段的索引。其返回值是一個(gè)包含結(jié)果集中所有數(shù)據(jù)的二維數(shù)組?!纠?-6】通過(guò)fetchAll()方法獲取結(jié)果集中所有行,并且通過(guò)for語(yǔ)句讀取二維數(shù)組中的數(shù)據(jù),完成數(shù)據(jù)庫(kù)中數(shù)據(jù)的循環(huán)輸出,具體步驟如下。(實(shí)例位置:光盤\MR\源碼\第5章\5-6)執(zhí)行SQL語(yǔ)句(8)創(chuàng)建index.php文件,設(shè)計(jì)網(wǎng)頁(yè)頁(yè)面。首先,通過(guò)PDO連接MySQL數(shù)據(jù)庫(kù)。然后,定義SELECT查詢語(yǔ)句,應(yīng)用prepare和execute方法執(zhí)行查詢操作。接著,通過(guò)fetchAll()方法返回結(jié)果集中所有行。最后,通過(guò)for語(yǔ)句完成結(jié)果集中所有數(shù)據(jù)的循環(huán)輸出。其關(guān)鍵代碼如下:<?php$dbms='mysql'; //數(shù)據(jù)庫(kù)類型,對(duì)于開發(fā)者來(lái)說(shuō),使用不同的數(shù)據(jù)庫(kù),只要改這個(gè),不用記住那么多的函數(shù)$host='localhost'; //數(shù)據(jù)庫(kù)主機(jī)名$dbName='db_database05'; //使用的數(shù)據(jù)庫(kù)$user='root'; //數(shù)據(jù)庫(kù)連接用戶名$pass='111'; 執(zhí)行SQL語(yǔ)句(9)//對(duì)應(yīng)的密碼$dsn="$dbms:host=$host;dbname=$dbName";try{$pdo=newPDO($dsn,$user,$pass);//初始化一個(gè)PDO對(duì)象,就是創(chuàng)建了數(shù)據(jù)庫(kù)連接對(duì)象$pdo $query="select*fromtb_pdo_mysql"; //定義SQL語(yǔ)句 $result=$pdo->prepare($query); //準(zhǔn)備查詢語(yǔ)句 $result->execute(); //執(zhí)行查詢語(yǔ)句,并返回結(jié)果集 $res=$result->fetchAll(PDO::FETCH_ASSOC); //獲取結(jié)果集中的所有數(shù)據(jù) for($i=0;$i<count($res);$i++){ //循環(huán)讀取二維數(shù)組中的數(shù)據(jù) ?>
執(zhí)行SQL語(yǔ)句(10) <tr><tdheight="22"align="center"valign="middle"><?phpecho$res[$i]['id'];?></td><tdalign="center"valign="middle"><?phpecho$res[$i]['pdo_type'];?></td><tdalign="center"valign="middle"><?phpecho$res[$i]['database_name'];?></td><tdalign="center"valign="middle"><?phpecho$res[$i]['dates'];?></td><tdalign="center"valign="middle"><ahref="#">刪除</a></td></tr><?php }}catch(PDOException$e){die("Error!:".$e->getMessage()."<br/>");}執(zhí)行SQL語(yǔ)句(11)?>
運(yùn)行結(jié)果如圖5-11所示。圖5-11fetchAll()方法返回結(jié)果集中所有數(shù)據(jù)
3.fetchColumn()方法
fetchColumn()方法獲取結(jié)果集中下一行指定列的值。其語(yǔ)法如下:stringPDOStatement::fetchColumn([intcolumn_number])可選參數(shù)column_number設(shè)置行中列的索引值,該值從0開始。如果省略該參數(shù)則將從第1列開始取值。通過(guò)fetchColumn()方法獲取結(jié)果集中下一行中指定列的值,注意這里是“結(jié)果集中下一行中指定列的值”。本實(shí)例輸出數(shù)據(jù)表中第一列的值,即輸出數(shù)據(jù)的ID。具體步驟如下:執(zhí)行SQL語(yǔ)句(12)【例5-7】創(chuàng)建index.php文件,設(shè)計(jì)網(wǎng)頁(yè)頁(yè)面。首先,通過(guò)PDO連接MySQL數(shù)據(jù)庫(kù)。然后,定義SELECT查詢語(yǔ)句,應(yīng)用prepare和execute方法執(zhí)行查詢操作。接著,通過(guò)fetchColumn()方法輸出結(jié)果集中下一行第一列的值。其關(guān)鍵代碼如下。(實(shí)例位置:光盤\MR\源碼\第5章\5-7)<?php$dbms='mysql'; //數(shù)據(jù)庫(kù)類型,對(duì)于開發(fā)者來(lái)說(shuō),使用不同的數(shù)據(jù)庫(kù),只要改這個(gè),不用記住那么多的函數(shù)$host='localhost'; //數(shù)據(jù)庫(kù)主機(jī)名$dbName='db_database05'; //使用的數(shù)據(jù)庫(kù)$user='root'; //數(shù)據(jù)庫(kù)連接用戶名$pass='111'; //對(duì)應(yīng)的密碼$dsn="$dbms:host=$host;dbname=$dbName";try{執(zhí)行SQL語(yǔ)句(13) $pdo=newPDO($dsn,$user,$pass);//初始化一個(gè)PDO對(duì)象,就是創(chuàng)建了數(shù)據(jù)庫(kù)連接對(duì)象$pdo $query="select*fromtb_pdo_mysql"; //定義SQL語(yǔ)句 $result=$pdo->prepare($query); //準(zhǔn)備查詢語(yǔ)句 $res
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 質(zhì)量體系監(jiān)視和測(cè)量資源培訓(xùn)課件
- 繪畫廚具課件教學(xué)課件
- 就餐服務(wù)課件教學(xué)課件
- 美術(shù)蜘蛛課件教學(xué)課件
- 高三化學(xué)一輪復(fù)習(xí) 氮及其化合物說(shuō)播課課件
- 膝關(guān)節(jié)保膝治療
- 車輪滾滾中班教案反思
- 鞭炮與安全教案反思
- 好玩的空氣說(shuō)課稿
- 物聯(lián)網(wǎng)燃?xì)鈭?bào)警器
- 對(duì)話大國(guó)工匠 致敬勞動(dòng)模范學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 半期評(píng)估試卷(1-4單元)-2024-2025學(xué)年四年級(jí)上冊(cè)數(shù)學(xué)北師大版
- python程序設(shè)計(jì)-說(shuō)課
- XX學(xué)校推廣應(yīng)用“國(guó)家中小學(xué)智慧教育平臺(tái)”工作實(shí)施方案
- 失業(yè)保險(xiǎn)待遇申請(qǐng)表
- 220KV線路運(yùn)維實(shí)施方案
- 重慶市園林工程師中高級(jí)考試復(fù)習(xí)題--園林理論
- 山西省蒲縣高閣村煤層火災(zāi)治理工程施工組織設(shè)計(jì)(總
- 建筑加固工程—粘鋼板驗(yàn)收記錄(全)
- 設(shè)備標(biāo)識(shí)牌模板
- 英語(yǔ)四年級(jí)上冊(cè) 4AM3U2P3課件
評(píng)論
0/150
提交評(píng)論