版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第14章PDO數(shù)據(jù)庫(kù)抽象層14.1PDO概述14.2PDO連接數(shù)據(jù)庫(kù)14.3在PDO中執(zhí)行SQL語(yǔ)句14.4PDO獲取結(jié)果集14.5PDO錯(cuò)誤處理14.6PDO捕獲SQL語(yǔ)句中的錯(cuò)誤14.7PDO事務(wù)處理14.8綜合實(shí)訓(xùn)案例第14章PDO數(shù)據(jù)庫(kù)抽象層學(xué)習(xí)目的與要求掌握PHP數(shù)據(jù)庫(kù)編程總體步驟掌握PDO連接數(shù)據(jù)庫(kù)的方法掌握在PDO中執(zhí)行SQL語(yǔ)句的方法
掌握在PHP網(wǎng)頁(yè)中顯示數(shù)據(jù)表的數(shù)據(jù)的方法理解捕獲SQL語(yǔ)句中的錯(cuò)誤PHP數(shù)據(jù)庫(kù)編程總體步驟①
連接數(shù)據(jù)庫(kù)②
執(zhí)行SQL語(yǔ)句③
獲取結(jié)果集④
顯示結(jié)果集例如:$pdo=newPDO($dsn,$user,$password);例如:$rows=$pdo->query($sql);例如:$row=$rows->fetch(PDO::FETCH_OBJ)例如:print_r($row)PHP數(shù)據(jù)庫(kù)編程步驟show_books.php①
②
③
④
show_books.php<?php$user="root";$password="";//連接數(shù)據(jù)庫(kù)的用戶名、密碼
$host="localhost";$db_name="bookmanage";//數(shù)據(jù)庫(kù)服務(wù)器地址、數(shù)據(jù)庫(kù)名稱
$dsn="mysql:host=$host;dbname=$db_name";//數(shù)據(jù)源名稱
try{$pdo=newPDO($dsn,$user,$password);//實(shí)例化對(duì)象
$pdo->query("setnamesutf8");$sql="select*frombook";$rows=$pdo->query($sql); echo"<tableborder=5bordercolor='#999999'> <tr><td>圖書編號(hào)</td><td>圖書名稱</td><td>作者</td></tr>"; while($row=$rows->fetch(PDO::FETCH_OBJ)){ echo"<tr>"; echo"<td>",$row->bookid,"</td>"; echo"<td>",$row->bookname,"</td>";echo"<td>",$row->editor,"</td>"; echo"</tr>"; } echo"</table>";}catch(Exception$e)//捕捉錯(cuò)誤信息
{echo$e->getMessage();}?>14.1
PDO概述14.1.1
PDO的概念及特點(diǎn)1.PDO的概念PDO是PHPDataObject(PHP數(shù)據(jù)對(duì)象)的簡(jiǎn)稱,是PHP5.1之后發(fā)布的一個(gè)全新的數(shù)據(jù)庫(kù)連接層,它支持目前流行的絕大多數(shù)數(shù)據(jù)庫(kù),例如MySQL、MSSQLServer、Oracle、Sybase等。PDO出現(xiàn)后,PHP程序連接數(shù)據(jù)庫(kù)就不再使用mysqli_*函數(shù)、oci_*函數(shù)或者mssql_*函數(shù)了,只需要使用PDO接口中的方法就可輕松地連接數(shù)據(jù)庫(kù),而且只需要修改PDO的DSN(數(shù)據(jù)源名稱)就可以連接不同類型的數(shù)據(jù)庫(kù)。14.1
PDO概述14.1.1
PDO的概念及特點(diǎn)2.PDO的特點(diǎn)PDO的作用就是統(tǒng)一各種數(shù)據(jù)庫(kù)的訪問接口,這樣可以輕松地與各種數(shù)據(jù)庫(kù)進(jìn)行交互,使得PHP操作各種不同類型的數(shù)據(jù)庫(kù)更加方便和高效。PDO擴(kuò)展是模塊化的,用戶在運(yùn)行時(shí),只需要為數(shù)據(jù)庫(kù)加載驅(qū)動(dòng)程序即可,不需要重新編譯和安裝PHP系統(tǒng)。14.1.2PDO的配置PDO是隨著PHP系統(tǒng)一起發(fā)行的,默認(rèn)情況下,PDO在PHP系統(tǒng)中為開啟狀態(tài)。如果要啟用對(duì)某個(gè)數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序的支持,就要打開php.ini文件進(jìn)行相應(yīng)的配置。PDO的配置選項(xiàng)如圖所示。要檢測(cè)PHP系統(tǒng)中PDO是否已經(jīng)啟動(dòng),可以編寫一個(gè)PHP程序,寫入語(yǔ)句:
<?php
phpinfo();?>
該P(yáng)HP程序文件啟動(dòng)后,若能找到PDO的信息內(nèi)容,就說明PDO已經(jīng)啟動(dòng)。進(jìn)一步?----增加記錄將show_books.php命名為show_books_insert.php在show_books_insert.php中用SQL語(yǔ)句往book表中增加”大學(xué)英語(yǔ)”的圖書信息,并把所有信息展示出來(數(shù)據(jù)參看P135示例8-14的結(jié)果)進(jìn)一步??----利用界面增加記錄設(shè)計(jì)一個(gè)添加圖書信息的界面的insert_html.php網(wǎng)頁(yè)結(jié)合show_books_insert.php中用SQL語(yǔ)句往book表中增加”高等數(shù)學(xué)”的圖書信息并把所有信息展示出來(數(shù)據(jù)參看P135示例8-14的結(jié)果)insert_html.php網(wǎng)頁(yè)insert_html.php代碼<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN"""><htmlxmlns=""><head><metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/><title>增加記錄</title></head><body><formmethod="post"action="show_books_insert.php">圖書編號(hào):<inputtype="text"name="bookid"/><br/>圖書名稱:<inputtype="text"name="bookname"/><br/>作者:<inputtype="text"name="editor"/><br/><inputtype="submit"name="ok"value="增加"/><br/></form></body></html>show_books_insert.php網(wǎng)頁(yè)show_books_insert.php代碼<html><head><metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/><title>圖書清單</title></head><body><?php$bookid=$_POST["bookid"];$bookname=$_POST["bookname"];$editor=$_POST["editor"];
$user="root";$password="";//連接數(shù)據(jù)庫(kù)的用戶名、密碼
$host="localhost";$db_name="bookmanage";//數(shù)據(jù)庫(kù)服務(wù)器地址、數(shù)據(jù)庫(kù)名稱
$dsn="mysql:host=$host;dbname=$db_name";//數(shù)據(jù)源名稱
try{$pdo=newPDO($dsn,$user,$password);//實(shí)例化對(duì)象
$pdo->query("setnamesutf8"); $insert_row_count=$pdo->exec('INSERTINTO`book`(`bookid`,`bookname`,`editor`)VALUES("'.$bookid.'","'.$bookname.'","'.$editor.'")'); $sql="select*frombook";$rows=$pdo->query($sql); echo"<tableborder=5bordercolor='#999999'> <tr><td>圖書編號(hào)</td><td>圖書名稱</td><td>作者</td></tr>"; while($row=$rows->fetch(PDO::FETCH_OBJ)){ echo"<tr>"; echo"<td>",$row->bookid,"</td>"; echo"<td>",$row->bookname,"</td>";echo"<td>",$row->editor,"</td>"; echo"</tr>"; } echo"</table>";}catch(Exception$e)//捕捉錯(cuò)誤信息
{echo$e->getMessage();}?></body></html>進(jìn)一步?
----修改記錄將show_books.php命名為show_books_update.php在show_books_update.php中,用SQL語(yǔ)句修改《西方經(jīng)濟(jì)學(xué)》的價(jià)格為60,并把所有圖書信息展示出來進(jìn)一步??----利用界面增加記錄設(shè)計(jì)一個(gè)修改圖書信息的界面的update_html.php網(wǎng)頁(yè)結(jié)合show_books_update.php中用SQL語(yǔ)句往book表中修改《西方經(jīng)濟(jì)學(xué)》的圖書信息并把所有信息展示出來(數(shù)據(jù)參看P135示例8-14的結(jié)果)update_html.php網(wǎng)頁(yè)update_html.php代碼<html><head><metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/><title>修改記錄</title></head><body><formmethod="post"action="show_books_update.php">圖書編號(hào):<inputtype="text"name="bookid"/>【必須填寫】<br/>圖書名稱:<inputtype="text"name="bookname"/><br/>作者:<inputtype="text"name="editor"/><br/>價(jià)格:<inputtype="text"name="price"/><br/>出版社:<inputtype="text"name="publish"/><br/>出版日期:<inputtype="text"name="pubdate"/><br/>庫(kù)存量:<inputtype="text"name="ckl"/><br/><inputtype="submit"name="ok"value="修改"/><br/></form></body></html>show_books_update.php代碼<html><head><metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/><title>圖書清單</title></head><body><?php$bookid=$_POST["bookid"];$bookname=$_POST["bookname"];$editor=$_POST["editor"];$price=$_POST["price"];$publish=$_POST["publish"];$pubdate=$_POST["pubdate"];$kcl=$_POST["kcl"];
$user="root";$password="";//連接數(shù)據(jù)庫(kù)的用戶名、密碼
$host="localhost";$db_name="bookmanage";//數(shù)據(jù)庫(kù)服務(wù)器地址、數(shù)據(jù)庫(kù)名稱
$dsn="mysql:host=$host;dbname=$db_name";//數(shù)據(jù)源名稱
try{$pdo=newPDO($dsn,$user,$password);//實(shí)例化對(duì)象
$pdo->query("setnamesutf8"); $update_row_count=$pdo->exec('update`book`set`bookname`="'.$bookname.'",`editor`="'.$editor.'",`price`="'.$price.'",`publish`="'.$publish.'",`pubdate`="'.$pubdate.'",`kcl`="'.$kcl.'"where`bookid`="'.$bookid.'",');
$sql="select*frombook";$rows=$pdo->query($sql); echo"<tableborder=5bordercolor='#999999'> <tr><td>圖書編號(hào)</td><td>圖書名稱</td><td>作者</td></tr>"; while($row=$rows->fetch(PDO::FETCH_OBJ)){ echo"<tr>"; echo"<td>",$row->bookid,"</td>"; echo"<td>",$row->bookname,"</td>";echo"<td>",$row->editor,"</td>"; echo"</tr>"; } echo"</table>";}catch(Exception$e)//捕捉錯(cuò)誤信息
{echo$e->getMessage();}?></body></html>進(jìn)一步?
----查詢記錄將show_books.php命名為show_books_select.php在show_books_select.php中,用SQL語(yǔ)句c查詢出《西方經(jīng)濟(jì)學(xué)》,并把查詢出來的圖書信息展示出來進(jìn)一步??----利用界面查詢記錄設(shè)計(jì)一個(gè)修改圖書信息的界面的select_html.php網(wǎng)頁(yè)結(jié)合show_books_select.php中,用SQL語(yǔ)句c查詢出《西方經(jīng)濟(jì)學(xué)》,并把查詢出來的圖書信息展示出來select_html.php代碼<html><head><metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/><title>查詢記錄</title></head><body><formmethod="post"action="show_books_select.php">圖書名稱:<inputtype="text"name="bookname"/>【必須填寫】<br/><inputtype="submit"name="ok"value="查詢"/><br/></form></body></html>show_books_select.php代碼<html><head><metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/><title>圖書清單</title></head><body><?php$bookname=$_POST["bookname"];
$user="root";$password="";//連接數(shù)據(jù)庫(kù)的用戶名、密碼
$host="localhost";$db_name="bookmanage";//數(shù)據(jù)庫(kù)服務(wù)器地址、數(shù)據(jù)庫(kù)名稱
$dsn="mysql:host=$host;dbname=$db_name";//數(shù)據(jù)源名稱
try{$pdo=newPDO($dsn,$user,$password);//實(shí)例化對(duì)象
$pdo->query("setnamesutf8");
$sql="select*frombookwherebooknamelike'%".$bookname."%'";$rows=$pdo->query($sql); echo"<tableborder=5bordercolor='#999999'> <tr><td>圖書編號(hào)</td><td>圖書名稱</td><td>作者</td> <td>價(jià)格</td><td>出版社</td><td>出版日期</td><td>庫(kù)存量</td></tr>"; while($row=$rows->fetch(PDO::FETCH_OBJ)){ echo"<tr>"; echo"<td>",$row->bookid,"</td>"; echo"<td>",$row->bookname,"</td>";echo"<td>",$row->editor,"</td>"; echo"<td>",$row->price,"</td>"; echo"<td>",$row->publish,"</td>"; echo"<td>",$row->pubdate,"</td>"; echo"<td>",$row->kcl,"</td>"; echo"</tr>"; } echo"</table>";}catch(Exception$e)//捕捉錯(cuò)誤信息
{echo$e->getMessage();}?></body></html>定義一個(gè)網(wǎng)站主操作界面main.php
將前面的各個(gè)功能整合成網(wǎng)站main.php代碼<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>主操作界面</title><scriptsrc=""></script><style>*{margin:0;padding:0}html,body{height:100%}#nav{float:left;width:15%;height:100%;background-color:antiquewhite}#con{float:right;width:85%;height:100%;background-color:aqua}</style><script>$(document).ready(function(){//頁(yè)面加載的時(shí)候,內(nèi)容框默認(rèn)show_books.php$('#con').load('./show_books.php'); //單擊mainmenu鏈接,加show_books.php$("#mainmenu").click(function(){$('#con').load('./show_books.php');});//單擊insertmenu鏈接,加載insert_html.html$("#insertmenu").click(function(){$('#con').load('./insert_html.php');});//單擊updatemenu鏈接,加載update_html.html$("#updatemenu").click(function(){$('#con').load('./update_html.php');}); //單擊selectmenu鏈接,加載select_html.html$("#selectmenu").click(function(){$('#con').load('./select_html.php');});})</script></head><body><ulid="nav"><li><ahref="#"id="mainmenu">主操作界面</a></li><li><ahref="#"id="insertmenu">增加</a></li><li><ahref="#"id="updatemenu">修改</a></li><li><ahref="#"id="selectmenu">查詢</a></li></ul><divid="con"></div></body></html>思考???前面搭建的網(wǎng)站,普通用戶能操作嗎?這樣有什么危險(xiǎn)??-----怎么辦???弄一個(gè)登錄驗(yàn)證頁(yè)面------當(dāng)用戶輸入正確用戶名和密碼,才能訪問main.php登錄驗(yàn)證相關(guān)問題創(chuàng)建user表設(shè)計(jì)登錄頁(yè)面login_html.php設(shè)計(jì)登錄驗(yàn)證程序login_check.php創(chuàng)建user表創(chuàng)建表格:CREATETABLE`user`(`name`varchar(10)NOTNULLCOMMENT'用戶名',`password`varchar(10)NOTNULLCOMMENT'密碼')ENGINE=InnoDBDEFAULTCHARSET=utf8;添加數(shù)據(jù):INSERTINTO`user`(`name`,`password`)VALUES('linronghai','12345678'),('yinbin','12345678');設(shè)計(jì)登錄頁(yè)面login_html.php<html><head><metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/><title>登錄界面</title></head><body><formmethod="post"action="login_check.php">姓名:<inputtype="text"name="myName"/><br/>密碼:<inputtype="password"name="myPassword"/><br/><inputtype="submit"name="mylogin"value="登錄"/></form></body></html>設(shè)計(jì)登錄驗(yàn)證程序???login_check.php<?phpheader("Content-Type:text/html;charset=utf-8");$name=$_POST["myName"];$password=$_POST["myPassword"];//怎么知道姓名和密碼是否對(duì)了呢??>怎么知道姓名和密碼是否對(duì)了呢???????select*fromuserwherename='yinbin'andpassword='12345678'可否利用上面的語(yǔ)句呢?怎么知道姓名和密碼是否對(duì)了呢?能判斷登錄信息的login_check.php<?phpheader("Content-Type:text/html;charset=utf-8");$myName=$_POST["myName"];$myPassword=$_POST["myPassword"];//怎么知道姓名和密碼是否對(duì)了呢?$dsn="mysql:host=localhost;dbname=bookmanage";$db_user="root";$db_password="";$pdo=newPDO($dsn,$db_user,$db_password);$pdo->query("setnamesutf8");$sql="select*fromuserwherename='".$myName."'andpassword='".$myPassword."'";$rows=$pdo->query($sql);if($row=$rows->fetch(PDO::FETCH_OBJ)){ echo"姓名和密碼正確";}else{echo"姓名或密碼錯(cuò)誤";}?>自動(dòng)跳轉(zhuǎn)到別的頁(yè)面???當(dāng)姓名和密碼都對(duì)了,如何跳轉(zhuǎn)到main.php當(dāng)姓名或密碼都錯(cuò)了,如何跳回到login_html.php網(wǎng)頁(yè)自動(dòng)跳轉(zhuǎn)(1)跳轉(zhuǎn)到主操作界面main.phpecho'<metahttp-equiv="refresh"content="4;URL=main.php">';(2)跳轉(zhuǎn)到登錄界面login_html.phpecho'<metahttp-equiv="refresh"content="4;URL=login_html.php">';此時(shí)的login_check.php帶跳轉(zhuǎn)的login_check.php代碼<?phpheader("Content-Type:text/html;charset=utf-8");$myName=$_POST["myName"];$myPassword=$_POST["myPassword"];//怎么知道姓名和密碼是否對(duì)了呢?$dsn="mysql:host=localhost;dbname=bookmanage";$db_user="root";$db_password="";$pdo=newPDO($dsn,$db_user,$db_password);$pdo->query("setnamesutf8");$sql="select*fromuserwherename='".$myName."'andpassword='".$myPassword."'";$rows=$pdo->query($sql);if($row=$rows->fetch(PDO::FETCH_OBJ)){ echo"姓名和密碼正確"; echo'<metahttp-equiv="refresh"content="4;URL=main.php">';}else{echo"姓名或密碼錯(cuò)誤"; echo'<metahttp-equiv="refresh"content="4;URL=login_html.php">';}?>前面形成了------
功能較完善的網(wǎng)站(1)登錄驗(yàn)證進(jìn)入后臺(tái)頁(yè)面(2)后臺(tái)頁(yè)面中A.可增加產(chǎn)品B.修改產(chǎn)品C.查找產(chǎn)品D.刪除產(chǎn)品14.2PDO連接數(shù)據(jù)庫(kù)
在PDO中,要建立與數(shù)據(jù)庫(kù)的連接,需要實(shí)例化PDO的構(gòu)造函數(shù)。PDO構(gòu)造函數(shù)的語(yǔ)法格式如下:construct(stringdsn,stringusername,stringpassword,arraydriver_options)參數(shù)含義dsn規(guī)定PDO的數(shù)據(jù)源名,包括主機(jī)名(地址)、端口號(hào)和數(shù)據(jù)庫(kù)名稱username可選。規(guī)定PDO連接數(shù)據(jù)庫(kù)的用戶名password可選。規(guī)定PDO連接數(shù)據(jù)庫(kù)的密碼driver_options可選。規(guī)定連接數(shù)據(jù)庫(kù)的其他選項(xiàng)。具體內(nèi)容參考PDO預(yù)定義常量的內(nèi)容【實(shí)例14-1】使用PDO連接MySQL數(shù)據(jù)庫(kù)。
<?phpheader("Content-Type:text/html;charset=gb2312");$db_name="student";//數(shù)據(jù)庫(kù)名稱
$user="root";//連接數(shù)據(jù)庫(kù)的用戶名
$password="";//連接數(shù)據(jù)庫(kù)的密碼
$host="localhost";//數(shù)據(jù)庫(kù)服務(wù)器地址
$dsn="mysql:host=$host;dbname=$db_name";//數(shù)據(jù)源名稱
try{
$pdo=newPDO($dsn,$user,$password);//實(shí)例化對(duì)象
echo"PDO連接數(shù)據(jù)庫(kù)成功!";
}catch(Exception$e)//捕捉錯(cuò)誤信息
{echo$e->getMessage();
}?>為了編程方便,可以將PDO連接數(shù)據(jù)庫(kù)的代碼編輯成一個(gè)獨(dú)立的PHP程序文件(如pdo_connect.php),需要使用PDO連接數(shù)據(jù)庫(kù)的時(shí)候,可以通過include()或include_once()語(yǔ)句調(diào)用該程序文件。程序文件pdo_conncet.php程序文件代碼如下:<?php$db_name="student";//數(shù)據(jù)庫(kù)名稱
$user="root";//連接數(shù)據(jù)庫(kù)的用戶名
$password="";//連接數(shù)據(jù)庫(kù)的密碼
$host="localhost";//數(shù)據(jù)庫(kù)服務(wù)器地址
$dsn="mysql:host=$host;dbname=$db_name";//數(shù)據(jù)源名稱
try{$pdo=newPDO($dsn,$user,$password);//實(shí)例化對(duì)象
$pdo->query("setnamesgb2312");}catch(Exception$e)//捕捉錯(cuò)誤信息
{
echo$e->getMessage();
}?>14.3
在PDO中執(zhí)行SQL語(yǔ)句PDO連接數(shù)據(jù)庫(kù)成功后,就可以執(zhí)行SQL語(yǔ)句操作數(shù)據(jù)表了。在PDO中執(zhí)行SQL語(yǔ)句主要采用三種方法:exec()方法、query()方法和預(yù)處理語(yǔ)句prepare()及execute()。14.3.1exec()方法exec()方法執(zhí)行后返回受影響記錄的行數(shù),其語(yǔ)法格式如下:intPDO:exec(stringstatement)參數(shù)含義statement規(guī)定要執(zhí)行的SQL語(yǔ)句。SQL語(yǔ)句通常指INSERT、DELETE和UPDATE語(yǔ)句【實(shí)例14-2】使用exec()方法執(zhí)行刪除操作。假設(shè)數(shù)據(jù)庫(kù)student包含數(shù)據(jù)表score,數(shù)據(jù)表的記錄如表14-3所示。使用exec()方法,刪除其中cj字段值小于60的記錄。xhxmbjkccj150212101方波材料2015高等數(shù)學(xué)92150412312李靜文法2015英語(yǔ)47..............................150313223于文華會(huì)計(jì)2015社會(huì)學(xué)67150112224董海川自動(dòng)化2015哲學(xué)58<?phpheader("Content-Type:text/html;charset=gb2312");
include_once("pdo_connect.php");$sql="deletefromscorewherecj<60";//要執(zhí)行的SQL語(yǔ)句
try{
$rows=$pdo->exec($sql);//執(zhí)行SQL語(yǔ)句
echo"共刪除記錄:",$rows;
}catch(Exception$e)
{echo$e->getMessage();}?>14.3.2query()方法query()方法執(zhí)行后返回查詢后的結(jié)果集,其語(yǔ)法格式如下:
PDOStatementPDO:query(stringstatement)
參數(shù)含義statement規(guī)定要執(zhí)行的SQL語(yǔ)句。SQL語(yǔ)句通常指SELECT語(yǔ)句【實(shí)例14-3】使用query()方法執(zhí)行查詢操作。
<?phpheader("Content-Type:text/html;charset=gb2312");
include_once("pdo_connect.php");
$sql="select*fromscorewherecj>=60";try{
$result=$pdo->query($sql);foreach($resultas$r){
echo$r["xh"],"",$r["xm"],"",$r["bj"],"",$r["kc"],"",$r["cj"],"<br/>";
}}catch(Exception$e){echo$e->getMessage();}?>14.3.3預(yù)處理語(yǔ)句prepare()和execute()【深入學(xué)習(xí)-自學(xué)】prepare()方法先做查詢的準(zhǔn)備工作,然后調(diào)用execute()方法執(zhí)行查詢,并且還可以通過bindParam()方法來綁定參數(shù)提供給execute()方法。prepare()方法和execute()方法的語(yǔ)法格式如下:
PDOStatementPDO:prepare(stringstatement,arraydriver_option)boolPDOStatement::execute(arrayinput_prarameters)參數(shù)含義statement規(guī)定要執(zhí)行的操作語(yǔ)句driver_options可選。規(guī)定連接數(shù)據(jù)庫(kù)的其他選項(xiàng),具體內(nèi)容參考PDO預(yù)定義常量?jī)?nèi)容參數(shù)含義input_parameters可選。規(guī)定prepare()方法要執(zhí)行SQL語(yǔ)句的參數(shù)表
execute()方法的參數(shù)說明【實(shí)例14-4】使用prepare()方法和execute()方法添加記錄。
<?phpheader("Content-Type:text/html;charset=gb2312");
include_once("pdo_connect.php");$query="insertintoscoreset
xh=:s_xh,xm=:s_xm,bj=:s_bj,kc=:s_kc,cj=:s_cj";try{$result=$pdo->prepare($query);$result->execute(array(':s_xh'=>'140213023',':s_xm'=>'錢文剛',':s_bj'=>'金融2014',':s_kc'=>'西方經(jīng)濟(jì)學(xué)',':s_cj'=>67));echo"記錄成功加入!";}catch(Exception$e){echo$e->getMessage();}?>【實(shí)例14-5】使用prepare()方法和execute()方法查詢記錄。<?phpheader("Content-Type:text/html;charset=gb2312");
include_once("pdo_connect.php");$query="select*fromscorewherecj>=:s_cj";try{$result=$pdo->prepare($query);$result->execute(array(':s_cj'=>60));while($r=$result->fetch(PDO::FETCH_ASSOC)){echo$r["xh"],"";echo$r["xm"],"";echo$r["bj"],"";echo$r["kc"],"";echo$r["cj"],"<br/>";}}catch(Exception$e){echo$e->getMessage();}?>14.4
PDO獲取結(jié)果集當(dāng)使用PDO->query()或使用prepare()和execute()查詢記錄時(shí),會(huì)得到返回的結(jié)果集,常用的獲取結(jié)果集的方法有:fetch()、fetchAll()和fetchColumn()。14.4.1fetch()方法fetch()方法獲取結(jié)果集中的下一行,其語(yǔ)法格式如下:mixedPDOStatement::fetch(intfetch_style,intcursor_orientation,intcursor_offset)參數(shù)含義fetch_style可選。規(guī)定結(jié)果集的返回方式,具體值如表14-8所示cursor_orientation可選。規(guī)定PDOStatement對(duì)象的一個(gè)浮動(dòng)游標(biāo),可用于獲取指定的一行cursor_offset可選。規(guī)定游標(biāo)的偏移量值含義PDO::FETCH_ASSOC關(guān)聯(lián)數(shù)組形式PDO::FETCH_NUM數(shù)字索引數(shù)組形式PDO::FETCH_BOTH兩者數(shù)組形式都有,為默認(rèn)值PDO::FETCH_OBJ按照對(duì)象的形式PDO::FETCH_BOUND以布爾值的形式返回結(jié)果,同時(shí)將獲取的列的值賦給bindParam()方法中指定的變量PDO::FETCH_LAZY以關(guān)聯(lián)數(shù)組、數(shù)字索引數(shù)組對(duì)象和對(duì)象三種形式返回結(jié)果表
fetch_style()可選值show_books.php【實(shí)例14-6】使用fetch()方法獲取結(jié)果集的數(shù)據(jù)。
<?phpheader("Content-Type:text/html;charset=gb2312");
include_once("pdo_connect.php");$query="select*fromscore";try{$result=$pdo->prepare($query);$result->execute();while($r=$result->fetch(PDO::FETCH_OBJ))
{
echo$r->xh,"";echo$r->xm,"";echo$r->bj,"";echo$r->kc,"";echo$r->cj,"<br/>";}}catch(Exception$e){echo$e->getMessage();}?>14.4.2fetchAll()方法fetchAll()方法可以獲取結(jié)果集的全部行,它的返回值是一個(gè)包含結(jié)果集中所有數(shù)據(jù)的二維數(shù)組。其語(yǔ)法格式如下:
arrayPDOStatement::fetchAll(intfetch_style,intcolumn_index)
參數(shù)含義fetch_style可選。規(guī)定結(jié)果集的返回方式,可選值見表14-8column_index可選。規(guī)定字段的索引值【實(shí)例14-7】使用fetchAll()方法獲取結(jié)果集的全部數(shù)據(jù)。<?phpheader("Content-Type:text/html;charset=gb2312");
include_once("pdo_connect.php");$query="select*fromscore";try{$result=$pdo->prepare($query);$result->execute();$r=$result->fetchAll(PDO::FETCH_ASSOC);
for($i=0;$i<count($r);$i++){
echo$r[$i]["xh"],"";echo$r[$i]["xm"],"";echo$r[$i]["bj"],"";echo$r[$i]["kc"],"";echo$r[$i]["cj"],"<br/>";}}catch(Exception$e){echo$e->getMessage();}?>14.4.3fetchColumn()方法fetchColumn()方法獲取結(jié)果集中下一行的指定列的值,其語(yǔ)法格式如下:
stringPDOStatement::fetchColumn(intcolumn_number)參數(shù)含義column_num可選。規(guī)定字段的索引值,從0開始。若忽略,則從第一列開始取值【實(shí)例14-8】使用fetchColumn()獲取結(jié)果集中下一行的一列數(shù)據(jù)。
<?phpheader("Content-Type:text/html;charset=gb2312");
include_once("pdo_connect.php");$query="select*fromscore";$result=$pdo->prepare($query);$result->execute();echo$result->fetchColumn(0);//獲取第一行第一列的值
?>14.5PDO錯(cuò)誤處理(體驗(yàn))
show_books_err.php14.5PDO錯(cuò)誤處理(體驗(yàn))
show_books_err.php前句話作用:定義了錯(cuò)誤發(fā)生時(shí)的處理方式有它的區(qū)別當(dāng)出現(xiàn)錯(cuò)誤時(shí)-----可以捕獲這個(gè)錯(cuò)誤,并在網(wǎng)頁(yè)中顯示錯(cuò)誤原因大大方便我們調(diào)試程序!show_books_err.php
出錯(cuò)提示演示show_books_err.php
出錯(cuò)提示演示14.5PDO錯(cuò)誤處理(體驗(yàn))
show_books_err.php<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN"""><htmlxmlns=""><head><metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/><title>圖書清單</title></head><body><?php$user="root";$password="";//連接數(shù)據(jù)庫(kù)的用戶名、密碼
$host="localhost";$db_name="bookmanage";//數(shù)據(jù)庫(kù)服務(wù)器地址、數(shù)據(jù)庫(kù)名稱
$dsn="mysql:host=$host;dbname=$db_name";//數(shù)據(jù)源名稱
try{$pdo=newPDO($dsn,$user,$password);//實(shí)例化對(duì)象
$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); $pdo->query("setnamesutf8"); $sql="select*frombook";$rows=$pdo->query($sql); echo"<tableborder=5bordercolor='#999999'> <tr><td>圖書編號(hào)</td><td>圖書名稱</td><td>作者</td></tr>"; while($row=$rows->fetch(PDO::FETCH_OBJ)){ echo"<tr>"; echo"<td>",$row->bookid,"</td>"; echo"<td>",$row->bookname,"</td>";echo"<td>",$row->editor,"</td>"; echo"</tr>"; } echo"</table>";}catch(Exception$e)//捕捉錯(cuò)誤信息
{echo$e->getMessage();}?></body></html>14.7PDO事務(wù)處理(略)在PDO中也可以進(jìn)行事務(wù)的處理,包括:開啟事務(wù)、提交事務(wù)以及回滾事務(wù)。1.開啟事務(wù)開啟事務(wù)是通過beginTransaction()方法來實(shí)現(xiàn)的。該方法將關(guān)閉自動(dòng)提交(mit)模式,直到事務(wù)提交或者事務(wù)回滾以后才恢復(fù)。2.事務(wù)提交事務(wù)提交是通過commit()方法來完成的。該方法若提交成功,則返回TRUE,否則返回FALSE。3.事務(wù)回滾事務(wù)回滾是通過rollback()方法來完成的?!緦?shí)例14-14】事務(wù)的開啟、提交以及回滾。
<?phpheader("Content-Type:text/html;charset=gb2312");include_once("pdo_connect.php");//通過PDO連接數(shù)據(jù)庫(kù)
try
{$pdo->beginTransaction();//開啟事務(wù)
$sql="updatescoresetbj='通信2015'wherexh='150212101'";
$result=$pdo->prepare($sql);
$result->execute();$pdo->commit();//提交事務(wù)
}catch(PDOException$e)
{
echo"錯(cuò)誤:",$e->getMessage();$pdo->rollback();//回滾事務(wù)
}?>14.8綜合實(shí)訓(xùn)案例本節(jié)主要介紹利用PDO設(shè)計(jì)用戶登錄界面的方法和步驟。1.分析假定有數(shù)據(jù)庫(kù)bookmanage,其中包含數(shù)據(jù)表user,表結(jié)構(gòu)如表所示字段字段類型含義namevarchar用戶名passwordva
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 轉(zhuǎn)換 白板課件
- x形構(gòu)圖課件教學(xué)課件
- 融通倉(cāng)概述課件
- 任務(wù)二 《撰寫演講稿》教學(xué)教學(xué)設(shè)計(jì) 2023-2024學(xué)年統(tǒng)編版語(yǔ)文八年級(jí)下冊(cè)
- 勵(lì)志正能量課件
- 專題8 動(dòng)態(tài)問題2024年中考數(shù)學(xué)教學(xué)設(shè)計(jì)(深圳專用版)
- 暢談理想主題班會(huì)教案
- 買文具(教學(xué)設(shè)計(jì))-2024-2025學(xué)年北師大版四年級(jí)上冊(cè)數(shù)學(xué)
- 托木吾斯塘鎮(zhèn)中心小學(xué)二年級(jí)上學(xué)期語(yǔ)文10月期中綜合訓(xùn)練卷
- 四年級(jí)語(yǔ)文下學(xué)期期末質(zhì)量監(jiān)測(cè)試卷(PDF版 無答案)
- T∕CTSS 3-2019 茶藝職業(yè)技能競(jìng)賽技術(shù)規(guī)程
- 法語(yǔ)語(yǔ)音入門整理版
- 2023深圳工務(wù)署品牌名單
- 整體家裝產(chǎn)品手冊(cè)
- 井下作業(yè)井控題庫(kù)全集
- 小學(xué)音樂-《阿嘍嘍》教學(xué)設(shè)計(jì)學(xué)情分析教材分析課后反思
- 小學(xué)體育人教三~四年級(jí)第四章跳躍與游戲跨越式跳高(金堂縣實(shí)驗(yàn)小學(xué))
- DB13T 5188-2020 地下管道非開挖鋪設(shè)工程水平定向鉆施工技術(shù)規(guī)程
- 初三化學(xué)常見物質(zhì)的化學(xué)式化合價(jià)
- 顱內(nèi)動(dòng)脈動(dòng)脈瘤介入治療臨床路徑
- 《鄉(xiāng)土中國(guó)》“家族”、“男女有別”課件-高中語(yǔ)文統(tǒng)編版
評(píng)論
0/150
提交評(píng)論