版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
10.1PHP操作MySQL數(shù)據(jù)庫陳學(xué)平011PHP操作MySQL數(shù)據(jù)庫1PHP操作MySQL數(shù)據(jù)庫PHP中,支持對多種數(shù)據(jù)庫的操作,且提供了相關(guān)的數(shù)據(jù)庫連接函數(shù)或操作函數(shù)。1.1連接MySQL數(shù)據(jù)庫PHP中,要對數(shù)據(jù)庫進(jìn)行操作,首先需要連接數(shù)據(jù)庫。連接數(shù)據(jù)庫可使用mysqli_connect()函數(shù),其語法格式如下所示。resourcemysqli_connect([string$server[,string$username[,string$password[,bool$new_link[,int$client_flags]]]]])其中,參數(shù)server為要連接的數(shù)據(jù)庫服務(wù)器的名稱或IP;參數(shù)username為連接數(shù)據(jù)庫的用戶名,若沒有設(shè)置該參數(shù),則默認(rèn)為服務(wù)器進(jìn)程所有者的用戶名;參數(shù)password為連接數(shù)據(jù)庫的密碼,如果未設(shè)置該參數(shù),則默認(rèn)為空。1.1連接MySQL數(shù)據(jù)庫參數(shù)new_link則改變了此行為,若設(shè)置該參數(shù)為布爾值true,則將在每一次使用mysqli_connect函數(shù)進(jìn)行數(shù)據(jù)庫連接時打開新的數(shù)據(jù)庫連接,甚至在之前曾使用同樣的參數(shù)進(jìn)行過數(shù)據(jù)庫的連接。參數(shù)client_flags為設(shè)置客戶端信息,它可以是以下常用的組合。MYSQLI_CLIENT_COMPRESS:在客戶端使用壓縮的通訊協(xié)議。MYSQLI_CLIENT_IGNORE_SPACE:允許在函數(shù)名后留空格位。MYSQLI_CLIENT_INTERACTIVE:允許設(shè)置斷開連接之前所空閑等候的interactive_timeout時間。MYSQLI_CLIENT_SSL:使用SSL協(xié)議進(jìn)行加密。1.1連接MySQL數(shù)據(jù)庫該函數(shù)嘗試打開或重復(fù)使用一個已打開的MySQL數(shù)據(jù)庫服務(wù)器的連接。若成功連接,MySQL數(shù)據(jù)庫服務(wù)器,返回一個MySQL連接標(biāo)識,否則返回布爾值false。實例10-1如何在PHP腳本中進(jìn)行MySQL數(shù)據(jù)庫服務(wù)器的連接。代碼如下所示。<?php$link=mysqli_connect("localhost","root","root");//連接至本地MySQL服務(wù)器,用戶名和密碼均為rootif($link){echo"連接服務(wù)器成功";}else{echo"連接服務(wù)器失敗";}?>1.1連接MySQL數(shù)據(jù)庫分析:在上述代碼中創(chuàng)建一個變量$link來獲取連接服務(wù)器的值,使用mysqli_connect函數(shù)連接本地MySQL數(shù)據(jù)庫服務(wù)器,連接數(shù)據(jù)庫的用戶名和密碼均為root,最后對這一個變量$link進(jìn)行判斷,如果有值,則提示連接服務(wù)器成功,否則提示連接服務(wù)器失敗。注意:若數(shù)據(jù)庫服務(wù)器不可用,或連接數(shù)據(jù)庫的用戶名或密碼錯誤,則可能會引起一條PHP警告信息,如下所示。Warning:mysqli_connect()[function.mysql-connect]:Accessdeniedforuser'root'@'localhost'(using1.1連接MySQL數(shù)據(jù)庫password:YES)inD:\xampplite\htdocs\book\source\18\10.1.phponline2為此通常在進(jìn)行數(shù)據(jù)庫連接時,在連接函數(shù)前使用“@”符號抑制錯誤信息的輸出,然后在連接函數(shù)后使用DIE函數(shù)指定錯誤信息并停止腳本的執(zhí)行。實例10-2在PHP腳本中如何安全地連接MySQL數(shù)據(jù)庫服務(wù)器。代碼如下所示。<?php$link=@mysqli_connect("localhost","root","root")ordie("服務(wù)器連接失?。?);//連接本地數(shù)據(jù)庫服務(wù)器1.1連接MySQL數(shù)據(jù)庫if($link){echo"連接服務(wù)器成功";}?>測試輸出下面的信息連接服務(wù)器成功分析:在上述程序中,使用“@”符號抑制連接數(shù)據(jù)庫服務(wù)器的錯誤信息的輸出,并使用die()函數(shù)拋出定制的錯誤信息,終止整個腳本的執(zhí)行,在代碼中定義一個變量$link來接收獲取到的服務(wù)器的值,并進(jìn)行判斷。1.1連接MySQL數(shù)據(jù)庫注意:包含創(chuàng)建數(shù)據(jù)庫連接的腳本一結(jié)束,與服務(wù)器的連接就被關(guān)閉,除非之前已經(jīng)明確調(diào)用mysqli_close()函數(shù)關(guān)閉了數(shù)據(jù)庫連接。在實際的應(yīng)用中,可將數(shù)據(jù)庫連接放在一個單獨的文件中,在需要使用數(shù)據(jù)庫連接的腳本中使用include()函數(shù)或require()函數(shù)引用該文件。1.2斷開與MySQL的連接1通常在完成數(shù)據(jù)庫的使用后,需要斷開與MySQL數(shù)據(jù)庫服務(wù)器的連接。斷開與MySQL2數(shù)據(jù)庫服務(wù)器的連接通常使用函數(shù)mysqli_close()函數(shù),其語法格式如下所示。3boolmysqli_close([resource$link_identifier])4其中,參數(shù)link_identifier為數(shù)據(jù)庫連接標(biāo)識。若沒有該參數(shù),則關(guān)閉上一個已打開的非持久數(shù)據(jù)庫連接。函數(shù)關(guān)閉指定的連接標(biāo)識所關(guān)聯(lián)的非持久數(shù)據(jù)庫連接。1.2斷開與MySQL的連接注意:mysqli_close()函數(shù)不會關(guān)閉由mysql_Pconnect()函數(shù)所建立的持久連接。實例10-3在PHP腳本中關(guān)閉一個由mysqli_connect()函數(shù)所建立的數(shù)據(jù)庫連接。代碼如下所示。<?php$link=@mysqli_connect("localhost","root","root")ordie("服務(wù)器連接失??!");//連接數(shù)據(jù)庫服務(wù)器if($link){echo"連接服務(wù)器成功";}mysqli_close($link);//關(guān)閉數(shù)據(jù)服務(wù)器連接?>1.2斷開與MySQL的連接分析:在上述代碼中,定義一個變量$link來接收獲取到的服務(wù)器的值,并進(jìn)行判斷。使用mysqli_close()函數(shù)關(guān)閉一個已創(chuàng)建的非持久數(shù)據(jù)連接,注意在這個關(guān)閉函數(shù)中加入定義的變量$link。1.3選擇和使用MySQL數(shù)據(jù)庫實例10-4在PHP腳本中如何選擇MySQL數(shù)據(jù)庫服務(wù)器上的數(shù)據(jù)庫。代碼如下所示。<?php$link=@mysqli_connect("localhost","root","root")ordie("數(shù)據(jù)庫連接失敗!");$conn=@mysqli_select_db($link,"mydb")ordie("選擇的數(shù)據(jù)庫不存在或不可用!");if($conn){echo"數(shù)據(jù)庫連接成功";}mysqli_close($link);?>1.3選擇和使用MySQL數(shù)據(jù)庫測試輸出信息。數(shù)據(jù)庫連接成功分析:在上述程序中,使用當(dāng)前數(shù)據(jù)庫連接選擇mydb數(shù)據(jù)庫作為當(dāng)前活動數(shù)據(jù)庫,對數(shù)據(jù)庫的所有操作都將作用于該活動數(shù)據(jù)庫。讀者可以看出,這時選擇數(shù)據(jù)作為當(dāng)前活動數(shù)據(jù)庫,其實就相當(dāng)于在MySQL命令行所使用的use命令。1.4執(zhí)行MySQL指令實例10-5在PHP腳本中如何執(zhí)行SQL語句。代碼如下所示。<?php$link=@mysqli_connect("localhost","root","root")ordie("數(shù)據(jù)庫連接失敗!");//連接數(shù)據(jù)庫服務(wù)器$conn=@mysqli_select_db($link,"mydb")ordie('選擇的數(shù)據(jù)庫不存在或不可用!');//選擇數(shù)據(jù)庫//先判斷數(shù)據(jù)庫是否連接成功,該判斷語句在調(diào)試程序中可使用,調(diào)試成功后,可不用該判斷if($conn){echo"數(shù)據(jù)庫連接成功";1.4執(zhí)行MySQL指令}//執(zhí)行SQL語句$myquery=mysqli_query($link,"select*fromuserinfo")ordie("SQL語句執(zhí)行失敗!");//執(zhí)行SQL語句//判斷SQL語句是否執(zhí)行if($myquery){echo"SQL語句執(zhí)行成功";}mysqli_close($link);//關(guān)閉數(shù)據(jù)庫連接?>1.4執(zhí)行MySQL指令輸出信息數(shù)據(jù)庫連接成功SQL語句執(zhí)行成功分析:在上述程序中,進(jìn)行了一次完整的數(shù)據(jù)連接操作。首先連接數(shù)據(jù)庫服務(wù)器,然后選擇數(shù)據(jù)庫,執(zhí)行SQL語句,最后關(guān)閉數(shù)據(jù)庫連接。使用了mysqli_query()函數(shù)執(zhí)行SQL語句。除了mysqli_query()函數(shù)能夠執(zhí)行SQL語句外,PHP還提供了另一函數(shù)mysqli_db_query()。該函數(shù)與mysqli_query()函數(shù)具有相同的功能,其區(qū)別在于mysqli_db_query()函數(shù)在執(zhí)行SQL語句時可以同時選擇數(shù)據(jù)庫。其語法格式如下所示。1.4執(zhí)行MySQL指令輸出信息resourcemysqli_db_query(string$database,string$query[,resource$link_identifier])其中,參數(shù)database為要執(zhí)行SQL語句的數(shù)據(jù)庫,參數(shù)query為要執(zhí)行的SQL語句,參link_indentifier為數(shù)據(jù)庫連接標(biāo)識符。若沒有設(shè)置該參數(shù),函數(shù)將打開上一個已創(chuàng)建的數(shù)據(jù)庫連接;若找不到已打開的數(shù)據(jù)庫連接,則嘗試以無參數(shù)方式調(diào)用mysqli_connect()函數(shù)創(chuàng)建一個數(shù)據(jù)庫連接。函數(shù)在執(zhí)行成功時根據(jù)查詢結(jié)果返回一個MySQL結(jié)果資源號,出錯時將返回false。函數(shù)會對INSERT、UPDATE和DELETE語句返回true或false來指示執(zhí)行成功或失敗。1.4執(zhí)行MySQL指令輸出信息注意:在使用該函數(shù)后,不會自動切換回先前使用mysqli_select_db()函數(shù)連接的數(shù)據(jù)庫。若想再次使用先前連接的數(shù)據(jù)庫,需要再次手動指定,因此建議在查詢時使用database.table的格式來替換該函數(shù)。實例10-6如何在PHP腳本中獲取結(jié)果集中的記錄數(shù)實例10-6如何在PHP腳本中獲取結(jié)果集中的記錄數(shù)。代碼如下所示。<?php$link=@mysqli_connect("localhost","root","root")ordie("數(shù)據(jù)庫連接失?。?);//連接數(shù)據(jù)庫服務(wù)器$conn=@mysqli_select_db($link,"mydb")ordie("選擇的數(shù)據(jù)庫不存在或不可用!");//選擇數(shù)據(jù)庫$myquery=@mysqli_query($link,"select*fromuserinfo")ordie("SQL語句執(zhí)行失敗!");//執(zhí)行SQL語句echo"結(jié)果集中的行數(shù)為:".mysqli_num_rows($myquery);//獲取結(jié)果集的記錄數(shù)mysqli_close($link);//關(guān)閉數(shù)據(jù)庫連接?>實例10-6如何在PHP腳本中獲取結(jié)果集中的記錄數(shù)結(jié)果集中的行數(shù)為:5分析:在上述程序中,使用mysqli_num_rows函數(shù)獲取結(jié)果集中的記錄數(shù)。若在mysqli_query()函數(shù)中使用INSERT、UPDATE和DELETE語句,應(yīng)使用mysqli_affected_rows()函數(shù)獲取所影響到的記錄數(shù),其語法格式如下所示。intmysqli_affected_rows([resource$link_identifier])其中,參數(shù)link_indentifier為已打開的數(shù)據(jù)庫連接標(biāo)識符。若未設(shè)置該參數(shù),函數(shù)默認(rèn)使用上一次所打開的數(shù)據(jù)庫連接;若未找到該連接,函數(shù)將嘗試以無參數(shù)方式調(diào)用mysqli_connect()函數(shù)建立數(shù)據(jù)庫連接并使用;若發(fā)生意外,如找不到數(shù)據(jù)庫連接或創(chuàng)建數(shù)據(jù)庫連接失敗時,將產(chǎn)生一條警告信息。實例10-6如何在PHP腳本中獲取結(jié)果集中的記錄數(shù)函數(shù)返回由參數(shù)link_indentifier所關(guān)聯(lián)的數(shù)據(jù)庫連接進(jìn)行的INSERT、UPDATE和DELETE查詢所影響到的行數(shù)。函數(shù)執(zhí)行成功則返回最近一次操作所影響的行數(shù),若最近一次查詢失敗,則返回-1。在使用UPDATE語句時,MySQL不會將原值與新值一樣的列進(jìn)行更新,因此該函數(shù)所返回的值不一定就是使用mysqli_query()函數(shù)所影響到的行數(shù),此時只是返回真正被更新的行數(shù)。實例10-7在PHP腳本中獲取第X行第X列記錄實例10-7在PHP腳本中獲取第X行第X列記錄。代碼如下所示。<?phpheader("Content-Type:text/html;charset=GB2312");$link=@mysqli_connect("localhost","root","root")ordie("數(shù)據(jù)庫連接失??!");//連接數(shù)據(jù)庫服務(wù)器$conn=@mysqli_select_db($link,"mydb")ordie("選擇的數(shù)據(jù)庫不存在或不可用!");//選擇數(shù)據(jù)庫mysqli_query($link,"setnamesgb2312");//設(shè)置輸出編碼$result=@mysqli_query($link,"select*fromuserinfo")ordie("SQL語句執(zhí)行失敗!");//執(zhí)行SQL語句//判斷結(jié)果集是否有效實例10-7在PHP腳本中獲取第X行第X列記錄if(!$result||!is_object($result)){echo"沒有結(jié)果!";exit;}//設(shè)置結(jié)果集的內(nèi)部指針到第二行,如果要查詢第三行,則將1改為2,要查詢第4行,則將1改為3.mysqli_data_seek($result,1);//從當(dāng)前行提取數(shù)據(jù)$rowData=mysqli_fetch_array($result);echo$rowData[3];//輸出第四列的值,如果改為2,則是第3列的值。//關(guān)閉連接mysqli_close($link);//關(guān)閉數(shù)據(jù)庫連接?>重慶1圖10-1查詢表中的數(shù)據(jù)經(jīng)測試,顯示結(jié)果與表中的數(shù)據(jù)是對應(yīng)的。分析:在上述程序中,mysqli_data_seek()函數(shù)將光標(biāo)移動到所需的行號,獲取結(jié)果集中第X行的數(shù)據(jù)信息。測試輸出信息如圖10-1所示。實例10-8用mysqli_result獲取結(jié)果集中的所有數(shù)據(jù)注意:因MySQL服務(wù)器中存儲數(shù)據(jù)的編碼與瀏覽器顯示結(jié)果的編碼有可能不一致所以在程序中,使用了setnamesgb2312直接指定其內(nèi)容輸出的編碼。若未指定輸出字符編碼,則可能出現(xiàn)亂碼。以上實現(xiàn)了獲取結(jié)果集中的某一行數(shù)據(jù)。其實通過mysqli_fetch_all()函數(shù)可以輸出結(jié)果集中的所有數(shù)據(jù)。實例10-8用mysqli_result獲取結(jié)果集中的所有數(shù)據(jù)使用mysqli_fetch_all()函數(shù)可以從mysqli_result對象中獲取結(jié)果集中的所有數(shù)據(jù)。代碼如下所示。<?phpheader("Content-Type:text/html;charset=GB2312");$link=@mysqli_connect("localhost","root","root")ordie("數(shù)據(jù)庫連接失敗!");//連接數(shù)據(jù)庫服務(wù)器$conn=@mysqli_select_db($link,"mydb")ordie("選擇的數(shù)據(jù)庫不存在或不可用!");//選擇數(shù)據(jù)庫mysqli_query($link,"setnamesgb2312");//設(shè)置輸出編碼$result=@mysqli_query($link,"select*fromuserinfo")ordie("SQL語句執(zhí)行失敗!");//執(zhí)行SQL語句實例10-8用mysqli_result獲取結(jié)果集中的所有數(shù)據(jù)//$query="SELECT*FROMtable";//SQL查詢語句//$result=mysqli_query($conn,$query);//執(zhí)行SQL查詢并返回結(jié)果集if($result){$data=mysqli_fetch_all($result,MYSQLI_ASSOC);//將結(jié)果集轉(zhuǎn)換為關(guān)聯(lián)數(shù)組形式foreach($dataas$row){echoimplode(",",$row)."\n".'</br>';//輸出每一行數(shù)據(jù)實例10-8用mysqli_result獲取結(jié)果集中的所有數(shù)據(jù)}}else{echo"沒有數(shù)據(jù).";}分析:在上述程序中,implode函數(shù)返回一個由數(shù)組元素組合成的字符串。foreach($dataas$row)//foreach語法是專門針對PHP數(shù)組進(jìn)行循環(huán)遍歷的語法結(jié)構(gòu)。//循環(huán)數(shù)組$data,將每個值賦給$row變量,并且數(shù)組指針會逐一地移動,直到到達(dá)最后一個數(shù)組元素。實例10-8用mysqli_result獲取結(jié)果集中的所有數(shù)據(jù)實例10-9采用mysql_fetch_row函數(shù)獲取結(jié)果集中的所有數(shù)據(jù)通過對結(jié)果集進(jìn)行循環(huán),輸出結(jié)果集中的所有數(shù)據(jù)信息。其輸出結(jié)果如圖10-2所示。圖10-2顯示結(jié)果實例10-9采用mysql_fetch_row函數(shù)獲取結(jié)果集中的所有數(shù)據(jù)。代碼如下所示。<?phpheader("Content-Type:text/html;charset=GB2312");$link=@mysqli_connect("localhost","root","root")ordie("數(shù)據(jù)庫連接失敗!");//連接數(shù)據(jù)庫服務(wù)器$conn=@mysqli_select_db($link,"mydb")ordie("選擇的數(shù)據(jù)庫不存在或不可用!");//選擇數(shù)據(jù)庫mysqli_query($link,"setnamesGB2312");//設(shè)置輸出字符編碼實例10-9采用mysql_fetch_row函數(shù)獲取結(jié)果集中的所有數(shù)據(jù)$myquery=@mysqli_query($link,"select*fromuserinfo")ordie("SQL語句執(zhí)行失敗!");//執(zhí)行SQL語句echo"<tableborder=\"1\"><tr><th>id</th><th>姓名</th><th>性別</th><th>地址</th><th>郵件</th></tr>";while($row=mysqli_fetch_row($myquery)){//循環(huán)獲取結(jié)果集中的每一行echo"<tr><td>".$row[0]."</td>";echo"<td>".$row[1]."</td>";echo"<td>".$row[2]."</td>";echo"<td>".$row[3]."</td>";echo"<td>".$row[4]."</td></tr>";}echo"</table>";mysqli_close($link); //關(guān)閉數(shù)據(jù)庫連接?>實例10-9采用mysql_fetch_row函數(shù)獲取結(jié)果集中的所有數(shù)據(jù)圖10-3測試結(jié)果分析:在上述程序中,使用mysqli_fetch_row()函數(shù)循環(huán)獲取結(jié)果集中的每一行。讀者可發(fā)現(xiàn),其執(zhí)行的結(jié)果與前例結(jié)果完全相同。【實例10-10】在PHP中使用arraymysqli_fetch_array函數(shù)獲取結(jié)果集中的數(shù)據(jù)。代碼如下所示?!緦嵗?0-10】在PHP中使用arraymysqli_fetch_array函數(shù)獲取結(jié)果集中的數(shù)據(jù)<?phpheader("Content-Type:text/html;charset=GB2312");$link=@mysqli_connect("localhost","root","root")ordie("數(shù)據(jù)庫連接失?。?);//連接數(shù)據(jù)庫服務(wù)器$conn=@mysqli_select_db($link,"mydb")ordie("選擇的數(shù)據(jù)庫不存在或不可用!");//選擇數(shù)據(jù)庫mysqli_query($link,"setnamesGB2312");//設(shè)置輸出字符編碼【實例10-10】在PHP中使用arraymysqli_fetch_array函數(shù)獲取結(jié)果集中的數(shù)據(jù)$myquery=@mysqli_query($link,"select*fromuserinfo")ordie("SQL語句執(zhí)行失敗!");//執(zhí)行SQL語句echo"<tableborder=\"1\"><tr><th>id</th><th>姓名</th><th>性別</th><th>地址</th><th>郵件</th></tr>";while($row=mysqli_fetch_array($myquery,MYSQLI_ASSOC)){//循環(huán)獲取結(jié)果集中的數(shù)據(jù)echo"<tr><td>".$row["userid"]."</td>";【實例10-10】在PHP中使用arraymysqli_fetch_array函數(shù)獲取結(jié)果集中的數(shù)據(jù)echo"<td>".$row["username"]."</td>";echo"<td>".$row["sex"]."</td>";echo"<td>".$row["address"]."</td>";echo"<td>".$row["email"]."</td></tr>";}echo"</table>";mysqli_close($link);//關(guān)閉數(shù)據(jù)庫連接?>【實例10-10】在PHP中使用arraymysqli_fetch_array函數(shù)獲取結(jié)果集中的數(shù)據(jù)分析:在上述程序中,使用mysql_fetch_array()函數(shù)循環(huán)獲取結(jié)果集。讀者可以發(fā)現(xiàn),程序輸出結(jié)果與前例結(jié)果完全一樣。因該函數(shù)具有很強(qiáng)的靈活性,在實際應(yīng)用中通常使用該函數(shù)。當(dāng)結(jié)果集很大時,使用上述的方式會使頁面很長,不美觀,并且用戶查詢信息也很麻煩,因此需要對結(jié)果集進(jìn)行分頁顯示?!緦嵗?0-10】在PHP中使用arraymysqli_fetch_array函數(shù)獲取結(jié)果集中的數(shù)據(jù)【實例10-11】分頁顯示結(jié)果集中的數(shù)據(jù)【實例10-11】分頁顯示結(jié)果集中的數(shù)據(jù)。代碼如下所示。<?phpheader("Content-Type:text/html;charset=GB2312");$link=@mysqli_connect("localhost","root","root")ordie("數(shù)據(jù)庫連接失??!");//連接數(shù)據(jù)庫服務(wù)器$conn=@mysqli_select_db($link,"mydb")ordie("選擇的數(shù)據(jù)庫不存在或不可用!");//選擇數(shù)據(jù)庫mysqli_query($link,"setnamesGB2312");//設(shè)置輸出字符編碼$myquery=@mysqli_query($link,"select*fromuserinfo")ordie("SQL語句執(zhí)行失敗!");//執(zhí)行SQL語句$page_size=3;//每頁顯示記錄數(shù)【實例10-11】分頁顯示結(jié)果集中的數(shù)據(jù)$num_cnt=mysqli_num_rows($myquery);//獲取記錄總數(shù)$page_cnt=ceil($num_cnt/$page_size);//計算總頁數(shù)if(isset($_GET['p'])){//設(shè)置第一頁還是其他頁$page=$_GET['p'];}else{$page=1;}$query_start=($1)*$page_size;//計算每頁開始的記錄號$querysql="select*fromuserinfolimit$query_start,$page_size";//使用limit獲取記錄$queryset=mysqli_query($link,$querysql);//執(zhí)行SQL語句echo"<tableborder=\"1\"><tr><th>id</th><th>姓名</th><th>性別</th><th>地址</th><th>郵件</th></tr>";【實例10-11】分頁顯示結(jié)果集中的數(shù)據(jù)while($row=mysqli_fetch_array($queryset,
MYSQLI_ASSOC)){
//循環(huán)獲取結(jié)果集echo"<tr><td>".$row["userid"]."</td>";echo"<td>".$row["username"]."</td>";echo"<td>".$row["sex"]."</td>";echo"<td>".$row["address"]."</td>";echo"<td>".$row["email"]."</td></tr>";}echo"</table><br>";$pager="共$page_cnt頁跳轉(zhuǎn)至第";
//顯示分布if($page_cnt>1){
//頁面總數(shù)大于是則顯示分布for($i=1;$i<=$page_cnt;$i++){if($page==$i){$pager.="<ahref='?p=$i'><b>$i</b></a>";}else{$pager.="<ahref='?p=$i'>$i</a>";}}echo$pager."頁";}mysqli_close($link);?>【實例10-11】分頁顯示結(jié)果集中的數(shù)據(jù)圖10-4分頁顯示【實例10-11】分頁顯示結(jié)果集中的數(shù)據(jù)分析:在上述程序中,分頁顯示結(jié)果集,每一頁顯示3條記錄。首先獲取結(jié)果集的總數(shù),然后根據(jù)每一頁顯示的記錄數(shù)計算總的頁數(shù),再由當(dāng)前頁數(shù)和記錄數(shù)計算每一頁的起止記錄數(shù),并使用SELECT語句的LIMIT子句實現(xiàn),最后加粗顯示當(dāng)前頁碼。【實例10-11】分頁顯示結(jié)果集中的數(shù)據(jù)謝謝10.2管理MySQL數(shù)據(jù)庫中的數(shù)據(jù)陳學(xué)平
012管理MySQL數(shù)據(jù)庫中的數(shù)據(jù)2管理MySQL數(shù)據(jù)庫中的數(shù)據(jù)Web系統(tǒng)中,常常需要用戶在瀏覽器上通過表單對數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行操作,如添加數(shù)據(jù)記錄、更新數(shù)據(jù)記錄和刪除數(shù)據(jù)記錄等。這一節(jié)將對用戶在HTML表單上對數(shù)據(jù)進(jìn)行操作,然后提交至服務(wù)器并使用mysqli_query()函數(shù)執(zhí)行SQL語句的方式操作數(shù)據(jù)進(jìn)行詳細(xì)講解。2.1添加數(shù)據(jù)在實際的應(yīng)用中,用戶常常直接在瀏覽器表單中輸入相關(guān)數(shù)據(jù),然后提交表單。服務(wù)器站在接收到用戶提交的數(shù)據(jù)后采用mysqli_query()函數(shù)執(zhí)行相應(yīng)的INSERT語句將用戶輸入的數(shù)據(jù)添加至數(shù)據(jù)庫。【實例10-12】用戶輸入數(shù)據(jù)的HTML頁面代碼。代碼如下所示。<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""/TR/xhtml1/DTD/xhtml1-transitional.dtd"><htmlxmlns="/1999/xhtml">2.1添加數(shù)據(jù)<head><metahttp-equiv="Content-Type"content="text/html;charset=gb2312"/><title>添加數(shù)據(jù)</title></head><body><formid="form1"name="form1"method="post"action="13.php"><tablewidth="512"border="1"><tr>2.1添加數(shù)據(jù)<tdwidth="63">姓名:</td><tdwidth="433"><inputname="username"type="text"id="username"size="10"/></td></tr><tr><td>性別:</td><td><inputname="sex"type="text"id="sex"size="5"/></td></tr><tr><td>地址:</td>2.1添加數(shù)據(jù)<td><inputtype="text"name="address"id="address"size="50"/></td></tr><tr><td>郵件:</td><td><inputname="email"type="text"id="email"size="20"/></td></tr><tr><td></td><td><inputtype="submit"name="submit"id="submit"value="提交"/></td></tr>2.1添加數(shù)據(jù)</table></form></body></html>顯示如圖10-5所示。2.1添加數(shù)據(jù)圖10-5插入數(shù)據(jù)前端頁面分析:在上述代碼中,設(shè)置了一個用戶輸入數(shù)據(jù)的表單。在用戶單擊【提交】按鈕后,將表單提交至服務(wù)器進(jìn)行處理。【實例10-13】服務(wù)器在接收到用戶所提交的數(shù)據(jù)后,使用mysql_qeury()函數(shù)將用戶所提交的數(shù)據(jù)添加至數(shù)據(jù)庫。代碼如下所示。<?phpheader("Content-Type:text/html;charset=GB2312");$username=$_POST['username'];//獲取表單數(shù)據(jù)$sex=$_POST['sex'];2.1添加數(shù)據(jù)$address=$_POST['address'];$email=$_POST['email'];$ins_sql="insertintouserinfo(username,sex,address,email)values('$username','$sex','$address','$email')";//組成SQL語句$link=@mysqli_connect("localhost","root","root")ordie("數(shù)據(jù)庫連接失?。?);//連接數(shù)據(jù)庫服務(wù)器$conn=@mysqli_select_db($link,"mydb")ordie("選擇的數(shù)據(jù)庫不存在或不可用!");//選擇數(shù)據(jù)庫2.1添加數(shù)據(jù)$myquery=mysqli_query($link,$ins_sql);//執(zhí)行SQL語句if($myquery){echo"插入數(shù)據(jù)成功!";}else{echo"插入數(shù)據(jù)失??!";}mysqli_close($link);//關(guān)閉數(shù)據(jù)庫連接?>顯示如圖10-6所示。2.1添加數(shù)據(jù)圖10-6插入數(shù)據(jù)成功分析:在上述程序中,首先獲取表單數(shù)據(jù),再將表單數(shù)據(jù)組成SQL語句,然后使用mysqlIi_query()函數(shù)執(zhí)行該SQL語句,并根據(jù)返回結(jié)果輸入不同的提示信息。2.2更新數(shù)據(jù)在實際的應(yīng)用中,用戶常常需要對選擇的數(shù)據(jù)進(jìn)行修改。【實例10-14】如何在頁面中瀏覽數(shù)據(jù)。代碼如下所示。<?phpheader("Content-Type:text/html;charset=GB2312");$link=@mysqli_connect("localhost","root","root")ordie("數(shù)據(jù)庫連接失?。?);//連接數(shù)據(jù)庫服務(wù)器$conn=@mysqli_select_db($link,"mydb")ordie("選擇的數(shù)據(jù)庫不存在或不可用!");//選擇數(shù)據(jù)庫2.2更新數(shù)據(jù)mysqli_query($link,"setnamesGB2312");//設(shè)置輸出字符編碼$myquery=@mysqli_query($link,"select*fromuserinfo")ordie("SQL語句執(zhí)行失敗!");//執(zhí)行SQL語句$page_size=3;$num_cnt=mysqli_num_rows($myquery);//獲取所有記錄$page_cnt=ceil($num_cnt/$page_size);//計算所有頁數(shù)2.2更新數(shù)據(jù)if(isset($_GET['p'])){$page=$_GET['p'];}else{$page=1;$query_start=($1)*$page_size;//計算每頁開始記錄號$querysql="select*fromuserinfolimit$query_start,$page_size";//組成SQL語句$queryset=mysqli_query($link,$querysql);//執(zhí)行SQL語句2.2更新數(shù)據(jù)echo"<tableborder=\"1\"><tr><th>id</th><th>姓名</th><th>性別</th><th>地址</th><th>郵件</th><th>操作</th></tr>";while($row=mysqli_fetch_array($queryset,MYSQLI_ASSOC)){//循環(huán)獲取結(jié)果集echo"<tr><td>".$row["userid"]."</td>";echo"<td>".$row["username"]."</td>";echo"<td>".$row["sex"]."</td>";2.2更新數(shù)據(jù)echo"<td>".$row["address"]."</td>";echo"<td>".$row["email"]."</td><td><ahref='15.php?id=$row[userid]'>修改</a></td></tr>";}echo"</table><br>";$pager="共$page_cnt頁跳轉(zhuǎn)至第";if($page_cnt>1){for($i=1;$i<=$page_cnt;$i++){if($page==$i){2.2更新數(shù)據(jù)$pager.="<ahref='?p=$i'><b>$i</b></a>";}else{$pager.="<ahref='?p=$i'>$i</a>";}}echo$pager."頁";//顯示分頁}}mysqli_close($link);//關(guān)閉連接2.2更新數(shù)據(jù)?>顯示如圖10-7所示。圖10-7數(shù)據(jù)顯示分析:在上述程序中,以每頁顯示3行記錄的方式進(jìn)行瀏覽。用戶單擊每一行后的【修改】鏈接時,將跳轉(zhuǎn)至修改頁面。2.2更新數(shù)據(jù)【實例10-15】根據(jù)ID號調(diào)用其信息并顯示在HTML表單。代碼如下所示。<?phpif(isset($_GET['id'])){//若沒有參數(shù)ID,則顯示出錯信息$id=$_GET['id'];header("Content-Type:text/html;charset=GB2312");$link=@mysqli_connect("localhost","root","root")ordie("數(shù)據(jù)庫連接失敗!");//連接數(shù)據(jù)庫服務(wù)器2.2更新數(shù)據(jù)$conn=@mysqli_select_db($link,"mydb")ordie("選擇的數(shù)據(jù)庫不存在或不可用!");//選擇數(shù)據(jù)庫mysqli_query($link,"setnamesGB2312");//設(shè)置輸出字符編碼$sql="select*fromuserinfowhereuserid='$id'";//組成SQL語句$myquery=@mysqli_query($link,$sql)ordie("SQL語句執(zhí)行失敗!");//執(zhí)行SQL語句$row=mysqli_fetch_array($myquery,MYSQLI_ASSOC);//獲取結(jié)果集321452.2更新數(shù)據(jù)echo<<<Eof<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""/TR/xhtml1/DTD/xhtml1-transitional.dtd"><htmlxmlns="/1999/xhtml"><head><metahttp-equiv="Content-Type"content="text/html;charset=gb2312"/>2.2更新數(shù)據(jù)<title>修改數(shù)據(jù)</title></head><formaction="16.php"method="post"name="updinfo"><tablewidth="200"border="1"><tr><td>ID:</td><td>$row[userid]</td></tr><tr>2.2更新數(shù)據(jù)<td>姓名:</td><td><inputname="username"type="text"value="$row[username]"size="10"/></td></tr><tr><td>性別:</td><td><inputname="sex"type="text"value="$row[sex]"size="5"/></td></tr><tr><td>地址:</td>2.2更新數(shù)據(jù)<td><inputname="address"type="text"value="$row[address]"size="50"/></td></tr><tr><td>郵件:</td><td><inputname="email"type="text"value="$row[email]"size="30"/></td></tr><tr><td><inputtype="hidden"name="hid"value="$row[userid]"></td>2.2更新數(shù)據(jù)<td><inputname="submit"type="submit"value="提交"/></td></tr></table></form><body></body></html>Eof;mysqli_close($link);}else{2.2更新數(shù)據(jù)echo"ID號錯誤,請<ahref='14.php'>瀏覽</a>";}?>顯示如圖10-8所示。圖10-8修改頁面修改數(shù)據(jù)為圖10-9所示。2.2更新數(shù)據(jù)圖10-9修改數(shù)據(jù)分析:在上述程序中,根據(jù)用戶提交的ID,從數(shù)據(jù)庫獲取信息,并顯示在HTML表單上。用戶可以自行修改其中信息,然后提交表單?!緦嵗?0-16】根據(jù)用戶提交的表單中的信息進(jìn)行修改。代碼如下所示。<?php2.2更新數(shù)據(jù)$hid=$_POST['hid'];//獲取表單USERID$username=$_POST['username'];//獲取表單姓名$sex=$_POST['sex'];//獲取表單性別$address=$_POST['address'];//獲取表單地址$email=$_POST['email'];//獲取表單郵件地址$upd_sql="updateuserinfosetusername='$username',sex='$sex',address='$address',email='$email'whereuserid='$hid'";//組成SQL語句2.2更新數(shù)據(jù)1header("Content-Type:text/html;charset=GB2312");2$link=@mysqli_connect("localhost","root","root")ordie("數(shù)據(jù)庫連接失??!");//連接數(shù)據(jù)庫服務(wù)器3$conn=@mysqli_select_db($link,"mydb")ordie("選擇的數(shù)據(jù)庫不存在或不可用!");//選擇數(shù)據(jù)庫4mysqli_query($link,"setnamesGB2312");//設(shè)置輸出字符編碼5$myquery=mysqli_query($link,$upd_sql);//執(zhí)行SQL語句2.2更新數(shù)據(jù)if($myquery){//根據(jù)返回值給出不同提示信息1echo"更新數(shù)據(jù)成功!";2}else{3echo"更新數(shù)據(jù)失??!";4}5echo"<ahref='14.php'>瀏覽</a>";6mysqli_close($link);//關(guān)閉數(shù)據(jù)庫連接7?>8顯示如圖10-10所示。92.2更新數(shù)據(jù)圖10-10更新成功查看更新的數(shù)據(jù)如圖10-11所示。2.2更新數(shù)據(jù)圖10-11查看更新數(shù)據(jù)分析:在上述程序中,根據(jù)用戶提交的表單數(shù)據(jù),組成SQL語句,再使用mysql_query()函數(shù)執(zhí)行該語句完成資料的修改。2.3刪除數(shù)據(jù)在實際應(yīng)用中,常常需要提供刪除功能。通常使用的方式是讓用戶自行選擇要刪除的資料,再給出提示框,讓用戶確認(rèn)是否真的刪除該信息?!緦嵗?0-17】用戶在選擇要刪除的資料時彈出相應(yīng)的窗口。代碼如下所示。<scriptlanguage="javascript">functionchk(id){//確認(rèn)刪除函數(shù)if(confirm("確定要刪除該資料?")){window.location="18.php?id="+id;}else{returnfalse;}2.3刪除數(shù)據(jù)}</script><?phpheader("Content-Type:text/html;charset=GB2312");$link=@mysqli_connect("localhost","root","root")ordie("數(shù)據(jù)庫連接失??!");//連接數(shù)據(jù)庫服務(wù)器$conn=@mysqli_select_db($link,"mydb")ordie("選擇的數(shù)據(jù)庫不存在或不可用!");//選擇數(shù)據(jù)庫2.3刪除數(shù)據(jù)mysqli_query($link,"setnamesGB2312");//設(shè)置輸出字符編碼$myquery=@mysqli_query($link,"select*fromuserinfo")ordie("SQL語句執(zhí)行失敗!");//執(zhí)行SQL語句$page_size=3;//設(shè)置每頁顯示記錄數(shù)$num_cnt=
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度標(biāo)磚及環(huán)保涂料采購合同3篇
- 2024年版東莞市土地使用權(quán)出讓合同
- 2025廠房買賣合同-航空航天產(chǎn)業(yè)基地產(chǎn)權(quán)交易及配套設(shè)施移交3篇
- 2024標(biāo)準(zhǔn)二手車交易協(xié)議樣本一
- 2024校長任期管理與績效提升聘用合同規(guī)范文本2篇
- 2024標(biāo)準(zhǔn)個人勞務(wù)合作協(xié)議模板版
- 2024年食品包裝OEM供應(yīng)協(xié)議
- 2025年度教育機(jī)構(gòu)實驗室場地借用及設(shè)備維護(hù)協(xié)議3篇
- 2024年閣樓銷售協(xié)議綜合版版B版
- 2024年網(wǎng)球賽事:場館租借合同3篇
- 福建省廈門市2023-2024學(xué)年高一上學(xué)期1月期末質(zhì)量檢測數(shù)學(xué)試題 附答案
- 高二上學(xué)期數(shù)學(xué)北師大版(2019)期末模擬測試卷A卷(含解析)
- 2024總經(jīng)理年終總結(jié)及2024工作計劃
- 全新照顧老人保姆合同協(xié)議書下載
- 三里屯派出所調(diào)解賠償協(xié)議書范文
- 第一單元:復(fù)習(xí)與提高(單元復(fù)習(xí)講義)-滬教版五年級數(shù)學(xué)下冊
- 國土空間規(guī)劃用途管制實施與研究
- 2024年江蘇省中考英語試卷十一套合卷附答案
- 智慧康養(yǎng)社區(qū)項目資金申請報告-超長期特別國債投資專項
- 高技能公共實訓(xùn)基地建設(shè)方案
- DL∕T 1732-2017 電力物聯(lián)網(wǎng)傳感器信息模型規(guī)范
評論
0/150
提交評論