PHP程序設計項目化教程課件 項目9 學生信息管理系統(tǒng)-使用PHP操作MySQL數(shù)據(jù)庫_第1頁
PHP程序設計項目化教程課件 項目9 學生信息管理系統(tǒng)-使用PHP操作MySQL數(shù)據(jù)庫_第2頁
PHP程序設計項目化教程課件 項目9 學生信息管理系統(tǒng)-使用PHP操作MySQL數(shù)據(jù)庫_第3頁
PHP程序設計項目化教程課件 項目9 學生信息管理系統(tǒng)-使用PHP操作MySQL數(shù)據(jù)庫_第4頁
PHP程序設計項目化教程課件 項目9 學生信息管理系統(tǒng)-使用PHP操作MySQL數(shù)據(jù)庫_第5頁
已閱讀5頁,還剩77頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

學生信息管理系統(tǒng)

——使用PHP操作MySQL數(shù)據(jù)庫

項目9計算機系決定開發(fā)一個學生信息管理系統(tǒng),以提高對學生信息的管理效率。張華作為計算機系的學生會成員,被委派負責這個項目的技術實現(xiàn)過?程。李老師指出,為了實現(xiàn)一個功能完善的學生信息管理系統(tǒng),張華需精通通過PHP來操作MySQL數(shù)據(jù)庫的技能。通過PHP連接并操作MySQL數(shù)據(jù)庫,可以輕松完成學生信息的增加、刪除、修改和查詢等操作,從而滿足學生信息管理系統(tǒng)的核心功能需?求。李老師鼓勵張華結合學生信息管理系統(tǒng)的實際需求,通過實踐來掌握使用PHP操作MySQL數(shù)據(jù)庫的技能,并確保系統(tǒng)功能的完整性和穩(wěn)定性。這不僅將提升張華的技術能力,也將為他未來的職業(yè)發(fā)展奠定堅實基?礎。學生信息管理系統(tǒng)■

掌握MySQL數(shù)據(jù)庫的基本概念和數(shù)據(jù)類型;■

熟悉使用PHP連接MySQL數(shù)據(jù)庫的方法,以及執(zhí)行SQL查詢等操作的流程;■

了解使用PHP操作MySQL過程中的常見安全問題及防范措施;■

掌握PHP中操作MySQL的常用函數(shù)和MySQLi擴展的使用方法?!?/p>

能夠根據(jù)實際需求,設計和創(chuàng)建合理的MySQL數(shù)據(jù)表結構;■

能夠使用PHP成功連接MySQL數(shù)據(jù)庫,并執(zhí)行基本的增刪改查操作;■

能夠編寫安全的SQL語句,防止SQL注入等安全問題;■

能夠結合PHP和MySQL技術,實現(xiàn)數(shù)據(jù)的存儲、檢索、更新和刪除等操作?!?/p>

提升在Web開發(fā)中運用PHP操作MySQL數(shù)據(jù)庫的實踐能力;■

培養(yǎng)細心、嚴謹?shù)臄?shù)據(jù)庫操作習慣,確保數(shù)據(jù)的一致性和安全性;■

加強邏輯思維和問題解決能力,靈活運用PHP和MySQL解決實際的數(shù)據(jù)處理問題。MySQL概述MySQL的基本操作PHP的數(shù)據(jù)庫擴展使用PHP操作MySQL數(shù)據(jù)庫MySQL概述PART019.1.1

MySQL簡介MySQL已經(jīng)成為最受歡迎的關系數(shù)據(jù)庫管理系統(tǒng)之一,尤其在Web應用領域表現(xiàn)出色,被譽為最佳的關系數(shù)據(jù)庫管理系統(tǒng)(RelationalDatabaseManagementSystem,RDBMS)應用軟件之一,這得益于其出色的性能和較高的穩(wěn)定性,以及豐富的功?能。MySQL的眾多優(yōu)勢中,體積小、速度快以及總體擁有成本低等尤為突出。更為值得一提的是,它采用了開放源代碼的方式,使得開發(fā)者可以根據(jù)自身需求進行靈活的定制和優(yōu)化。因此,眾多中小型網(wǎng)站紛紛選擇MySQL作為數(shù)據(jù)庫解決方案,以滿足日益增長的數(shù)據(jù)存儲和處理需求。MySQL的普及和應用,無疑為各行各業(yè)的數(shù)據(jù)管理帶來了巨大的便利和較高的效?益。9.1.2MySQL的特點MySQL作為一種廣泛使用的關系數(shù)據(jù)庫管理系統(tǒng),以其獨特的優(yōu)勢在數(shù)據(jù)管理領域占據(jù)了重要地位。1.開源2.跨平臺兼容3.性能卓越4.易操作5.強大的數(shù)據(jù)查詢能力6.可靠的事務處理功能7.社區(qū)支持9.1.3安裝MySQL在Windows系統(tǒng)上安裝MySQL時,需要遵循以下步?驟。(1)下載MySQL安裝?包。(2)雙擊下載的安裝包,開始安裝。(3)按照安裝向導的指示進行操作。(4)根據(jù)需求配置其他參數(shù),如端口號、數(shù)據(jù)存放位置?等。(5)完成安裝后,選擇立即啟動MySQL,或稍后手動啟?動。若使用的是本書前文介紹的phpStudy集成開發(fā)環(huán)境,那么MySQL已經(jīng)預裝在內,無須單獨安?裝。9.1.4啟動MySQL若使用的是phpStudy集成開發(fā)環(huán)境,則可以按照以下步驟啟動MySQL。(1)打開phpStudy控制面?板。(2)在服務列表中找到MySQL服?務。(3)單擊MySQL服務后面的“啟動”按鈕,稍等片刻,服務狀態(tài)將變?yōu)椤斑\行中”,表示MySQL已成功啟動。9.1.5安裝MySQL可視化工具為了更方便地管理MySQL數(shù)據(jù)庫,可以安裝可視化工具來輔助操作。以下是安裝MySQL可視化工具的簡要步?驟。(1)選擇合適的可視化工具。(2)下載與安裝。(3)連接到數(shù)據(jù)庫。(4)開始使用。此外,對于使用VisualStudioCode的開發(fā)者來說,建議安裝VisualStudioCode中的MySQL插件來管理數(shù)據(jù)庫。MySQL的基本操作PART029.2.1

MySQL數(shù)據(jù)庫操作在MySQL中,數(shù)據(jù)庫是存儲數(shù)據(jù)表、視圖、存儲過程等對象的容器。1.創(chuàng)建數(shù)據(jù)庫使用CREATEDATABASE語句可以創(chuàng)建一個新的數(shù)據(jù)庫,示例代碼如?下。CREATEDATABASEdatabase_name;2.選擇數(shù)據(jù)庫在對數(shù)據(jù)表進行操作之前,需要先選定一個數(shù)據(jù)庫作為當前的工作數(shù)據(jù)庫,示例代碼如?下。USEdatabase_name;CREATEDATABASEdatabase_name;USEdatabase_name;9.2.1

MySQL數(shù)據(jù)庫操作3.查看所有數(shù)據(jù)庫SHOWDATABASES命令用于列出MySQL服務器中所有的數(shù)據(jù)庫。SHOWDATABASES;4.刪除數(shù)據(jù)庫當不再需要數(shù)據(jù)庫時,可以使用DROPDATABASE語句將其刪除,這將同時刪除其中的所有數(shù)據(jù)表和相關數(shù)據(jù)。DROPDATABASEdatabase_name;5.查看數(shù)據(jù)庫創(chuàng)建信息使用SHOWCREATEDATABASE語句可以查看創(chuàng)建數(shù)據(jù)庫的詳細信息。SHOWCREATEDATABASEdatabase_name;在操作過程中需特別注意,刪除數(shù)據(jù)庫操作不可逆,執(zhí)行前需確保已做好數(shù)據(jù)備?份。SHOWDATABASES;DROPDATABASEdatabase_name;SHOWCREATEDATABASEdatabase_name;9.2.2

MySQL數(shù)據(jù)表操作數(shù)據(jù)表是數(shù)據(jù)庫中的核心組成部分,用于組織和存儲數(shù)據(jù)。1.創(chuàng)建數(shù)據(jù)表通過CREATETABLE語句可以創(chuàng)建新的數(shù)據(jù)表。CREATETABLEtable_name(column1datatype,column2datatype,...);2.查看所有數(shù)據(jù)表使用SHOWTABLES命令可以列出當前數(shù)據(jù)庫中所有的數(shù)據(jù)表。SHOWTABLES;CREATETABLEtable_name(column1datatype,column2datatype,...);SHOWTABLES;9.2.2

MySQL數(shù)據(jù)表操作3.查看數(shù)據(jù)表結構DESCRIBE或SHOWCOLUMNS命令可用于查看數(shù)據(jù)表的結構信息。DESCRIBEtable_name;或者使用:SHOWCOLUMNSFROMtable_name;4.修改數(shù)據(jù)表結構ALTERTABLE語句用于修改已存在的數(shù)據(jù)表的結構,如添加新列。ALTERTABLEtable_nameADDcolumn_namedatatype;5.刪除數(shù)據(jù)表DROPTABLE語句用于刪除整個數(shù)據(jù)表及其所有數(shù)據(jù)。DROPTABLEtable_name;DESCRIBEtable_name;SHOWCOLUMNSFROMtable_name;ALTERTABLEtable_nameADDcolumn_namedatatype;DROPTABLEtable_name;9.2.2

MySQL數(shù)據(jù)表操作6.清空數(shù)據(jù)表內容使用TRUNCATETABLE語句可以快速清空數(shù)據(jù)表中的所有數(shù)據(jù),同時重置任何自增字段。TRUNCATETABLEtable_name;TRUNCATETABLE語句不同于DELETEFROM語句,它不會記錄每行的刪除操作,因此速度更快,但不可恢?復。TRUNCATETABLEtable_name;9.2.3

MySQL數(shù)據(jù)操作MySQL數(shù)據(jù)操作涉及對數(shù)據(jù)表中數(shù)據(jù)的增刪改查。1.插入數(shù)據(jù)INSERTINTO語句用于向數(shù)據(jù)表中插入數(shù)據(jù)。INSERTINTOtable_name(column1,column2,...)VALUES(value1,value2,...);2.查詢數(shù)據(jù)SELECT語句用于在數(shù)據(jù)表中查詢數(shù)據(jù)。SELECT*FROMtable_name;使用WHERE命令可以實現(xiàn)帶條件的查詢。SELECT*FROMtable_nameWHEREcondition;INSERTINTOtable_name(column1,column2,...)VALUES(value1,value2,...);SELECT*FROMtable_name;SELECT*FROMtable_nameWHEREcondition;9.2.3

MySQL數(shù)據(jù)操作3.更新數(shù)據(jù)UPDATE語句用于更新數(shù)據(jù)表中的現(xiàn)有數(shù)據(jù)。UPDATEtable_nameSETcolumn1=value1,column2=value2,...WHEREcondition;4.刪除數(shù)據(jù)DELETEFROM語句用于從數(shù)據(jù)表中刪除數(shù)據(jù)。DELETEFROMtable_nameWHEREcondition;UPDATEtable_nameSETcolumn1=value1,column2=value2,...WHEREcondition;DELETEFROMtable_nameWHEREcondition;PHP的數(shù)據(jù)庫擴展PART039.3.1

MySQLi擴展MySQLi(MySQLimproved)是PHP中用于與MySQL數(shù)據(jù)庫進行交互的擴展。它提供了面向對象和面向過程的API,使得開發(fā)者能夠靈活地操作MySQL數(shù)據(jù)庫。MySQLi擴展支持預處理、事務處理、批量插入等高級功能,并且具有良好的性能和較高的穩(wěn)定?性。使用MySQLi擴展,可以連接到MySQL服務器,執(zhí)行SQL查詢,并處理返回的結果集。它還提供了豐富的錯誤處理機制,幫助開發(fā)者在出現(xiàn)問題時進行調試和排?查。9.3.2

PDO擴展PDO(PHPDataObjects,PHP數(shù)據(jù)對象)是一個輕量級、一致的數(shù)據(jù)訪問層,它提供了一個數(shù)據(jù)庫抽象層,使得開發(fā)者可以使用統(tǒng)一的接口來訪問不同類型的數(shù)據(jù)庫。PDO支持多種數(shù)據(jù)庫驅動程序,包括MySQL、PostgreSQL、SQLite等。與MySQLi相比,PDO更加靈活和可擴展。它支持預處理語句和參數(shù)綁定,從而提高了安全性和性能。此外,PDO還提供了事務處理、存儲過程和批量操作等高級功?能。使用PDO擴展,可以輕松地連接到數(shù)據(jù)庫,執(zhí)行復雜的SQL查詢,并處理返回的結果集。PDO還提供了異常處理機制,使得錯誤處理更加簡潔和直?觀。9.3.3其他數(shù)據(jù)庫擴展在選擇合適的數(shù)據(jù)庫擴展時,應綜合考慮多個關鍵因素。首先,要明確項目所使用的數(shù)據(jù)庫類型,因為不同的擴展支持不同的數(shù)據(jù)庫。其次,要根據(jù)項目的具體需求來挑選擴展,因為不同的數(shù)據(jù)庫擴展提供的功能集合各異。最后,安全性和穩(wěn)定性同樣至關重要,一個優(yōu)秀的擴展應能有效保護數(shù)據(jù)庫免受安全威?脅。鑒于MySQLi擴展在功能、性能、安全性和穩(wěn)定性方面的綜合表現(xiàn),本書推薦使用MySQLi擴展進行數(shù)據(jù)庫操?作。使用PHP操作MySQL數(shù)據(jù)庫PART049.4.1

MySQLi擴展的用法在PHP中,MySQLi擴展提供了功能強大的工具來連接和操作MySQL數(shù)據(jù)庫。它支持面向對象和面向過程的接口,可以方便地執(zhí)行預處理語句和處理事務。相較已廢棄的原始MySQL擴展,MySQLi擴展不僅更加穩(wěn)定、高效,還涵蓋更多的MySQL功?能。9.4.2

MySQLi擴展的核心函數(shù)MySQLi擴展提供了很多簡化開發(fā)的核心函數(shù)。MySQLi擴展的核心函數(shù)如表所?示。9.4.3連接MySQL數(shù)據(jù)庫在PHP中使用MySQLi擴展連接MySQL數(shù)據(jù)庫,通常使用mysqli_connect()函數(shù)。objectmysqli_connect([$host,$username,$password,$dbname,$port,$socket])mysqli_connect()函數(shù)共有6個可選參數(shù)。具體參數(shù)說明如?下。$host:可選,規(guī)定服務器名稱或IP地?址。$username:可選,規(guī)定MySQL用戶?名。$password:可選,規(guī)定MySQL密?碼。$dbname:可選,規(guī)定默認使用的數(shù)據(jù)?庫。$port:可選,規(guī)定嘗試連接到MySQL服務器的端口?號。$socket:可選,規(guī)定socket或要使用的已命名pipe。objectmysqli_connect([$host,$username,$password,$dbname,$port,$socket])9.4.3連接MySQL數(shù)據(jù)庫若數(shù)據(jù)庫連接成功,則返回數(shù)據(jù)庫連接的對象;若數(shù)據(jù)庫連接失敗,則返回false并提示W(wǎng)arning級別的錯誤信息。$host='localhost';//服務器地址

$user='root';//MySQL用戶名

$password='password';//MySQL密碼

$db='mydatabase';//數(shù)據(jù)庫名稱

//創(chuàng)建連接

$conn=mysqli_connect($host,$user,$password,$db);//檢查連接是否成功

if(!$conn){die("連接失敗:".mysqli_connect_error());}$host='localhost';//服務器地址

$user='root';//MySQL用戶名

$password='password';//MySQL密碼

$db='mydatabase';//數(shù)據(jù)庫名稱

//創(chuàng)建連接

$conn=mysqli_connect($host,$user,$password,$db);//檢查連接是否成功

if(!$conn){die("連接失敗:".mysqli_connect_error());}為了進一步提升代碼的可維護性和復用性,在進行大型網(wǎng)站或復雜應用的開發(fā)時,我們應當考慮將數(shù)據(jù)庫連接代碼封裝在一個獨立的PHP文件中。具體實現(xiàn)步驟如?下。1.創(chuàng)建封裝文件創(chuàng)建一個新的PHP文件,例如將其命名為connect.php。2.包含封裝文件在需要使用數(shù)據(jù)庫連接的PHP文件中,通過include或require語句引入connect.php文件。3.錯誤處理在封裝文件中,我們已經(jīng)加入了連接錯誤的處理邏輯。在實際應用中,還可以進一步優(yōu)化錯誤處理措施。通過將數(shù)據(jù)庫連接代碼封裝在一個獨立的文件中,我們可以實現(xiàn)代碼的復用和模塊化,提高開發(fā)效率,同時也使得項目結構更加清晰和易于維護。這是PHP項目開發(fā)中一種常見的最佳實踐方?式。封裝數(shù)據(jù)庫連接代碼9.4.4選擇MySQL數(shù)據(jù)庫如果在連接時沒有指定數(shù)據(jù)庫,可以在連接成功時,使用mysqli_select_db()函數(shù)來選擇并打開要操作的數(shù)據(jù)庫,之后才能對這個數(shù)據(jù)庫中的數(shù)據(jù)表進行增刪查改等各種操作。若在建立MySQL數(shù)據(jù)庫連接時指定了要訪問的數(shù)據(jù)庫,則可以使用函數(shù)mysqli_select_db()更改所指定的數(shù)據(jù)庫。boolmysqli_select_db($conn,$db);其中,$conn是通過mysqli_connect()函數(shù)建立的數(shù)據(jù)庫連接,$db是想要選擇的數(shù)據(jù)庫名?稱。使用該函數(shù)之后,返回一個布爾值,若打開數(shù)據(jù)庫成功則返回true,否則返回false。boolmysqli_select_db($conn,$db);9.4.5執(zhí)行SQL語句數(shù)據(jù)庫連接成功后,使用mysqli_query()函數(shù)來執(zhí)行SQL語句,其語法格式如下。boolmysqli_query($conn,$sql[,$resultmode])具體參數(shù)說明如?下。$conn:表示使用mysqli_connect()函數(shù)獲取的數(shù)據(jù)庫連?接。$sql:表示要執(zhí)行的SQL語?句。$resultmode:可選,表示結果集模式。當執(zhí)行寫操作時,成功則返回true,失敗則返回false;當執(zhí)行讀操作時,返回值是查詢結果集,結果集模式是以下兩種常?量。MYSQLI_STORE_RESULT:默認模式,會將結果集全部讀取到PHP文?件。MYSQLI_USE_RESULT:僅初始化結果集檢索,在處理結果集時進行數(shù)據(jù)讀?取。boolmysqli_query($conn,$sql[,$resultmode])【案例實踐9-1】實現(xiàn)學生注冊功能學生注冊功能的實現(xiàn)涉及前端頁面的設計、后端PHP腳本的編寫以及數(shù)據(jù)庫的添加操作等多個環(huán)?節(jié)。(1)設計前端頁面,以收集學生輸入的用戶名和密碼?!景咐龑嵺`9-1】實現(xiàn)學生注冊功能(2)在MySQL數(shù)據(jù)庫中創(chuàng)建一個名為students的數(shù)據(jù)表,用于存儲學生信息。CREATEDATABASEIFNOTEXISTSstudent_db;

USEstudent_db;

CREATETABLEIFNOTEXISTSstudents(

idINTAUTO_INCREMENTPRIMARYKEY,

usernameVARCHAR(50)NOTNULLUNIQUE,

passwordVARCHAR(255)NOTNULL

);【案例實踐9-1】實現(xiàn)學生注冊功能(3)建立與MySQL數(shù)據(jù)庫的連接。然后,我們將對這些數(shù)據(jù)進行驗證。【案例實踐9-1】實現(xiàn)學生注冊功能(4)啟動phpStudy,啟用Apache和MySQL服?務。(5)啟動內置服務器,在瀏覽器中打開html文?件。(6)輸入用戶名和密碼,單擊“注冊”按鈕,提示“學生注冊成功”。(7)單擊編輯器界面的Database按鈕,連接數(shù)據(jù)庫student_db,打開students數(shù)據(jù)表,查看添加的數(shù)據(jù),如圖所?示。9.4.6預處理操作在PHP項目開發(fā)中,使用傳統(tǒng)的SQL語句進行數(shù)據(jù)庫添加操作時,存在安全隱患,特別是當外部輸入的數(shù)據(jù)沒有得到適當?shù)霓D義處理時,惡意用戶可能會利用這個機會,通過注入特殊符號或惡意SQL代碼來發(fā)動攻擊,這就是所謂的SQL注入攻?擊。為了解決這一問題并提高數(shù)據(jù)庫操作的效率和安全性,MySQLi擴展引入了預處理(Prepared)機制。預處理是一種將SQL語句模板與數(shù)據(jù)分離的技術。這種方式不僅能夠有效防止SQL注入攻擊,還能提升查詢性能,因為數(shù)據(jù)庫可以預編譯并緩存SQL語句模?板。9.4.6預處理操作1.創(chuàng)建數(shù)據(jù)庫連接使用mysqli_connect()函數(shù)來創(chuàng)建與MySQL數(shù)據(jù)庫的連接。2.準備SQL語句模板準備一個帶有占位符的SQL語句模板,這里我們使用?作為占位?符。$sql="INSERTINTOstudents(name,age,email)VALUES(?,?,?)";$sql="INSERTINTOstudents(name,age,email)VALUES(?,?,?)";9.4.6預處理操作3.創(chuàng)建預處理語句使用mysqli_prepare()函數(shù)創(chuàng)建預處理語句。mysqli_stmtmysqli_prepare(mysqli$conn,string$query)下面是使用mysqli_prepare()函數(shù)的簡單示例。if($stmt=mysqli_prepare($conn,$sql)){//預處理語句創(chuàng)建成功

//接下來可以綁定參數(shù)并執(zhí)行預處理語句

}else{echo"Error:".$conn->error;}if($stmt=mysqli_prepare($conn,$sql)){//預處理語句創(chuàng)建成功

//接下來可以綁定參數(shù)并執(zhí)行預處理語句

}else{echo"Error:".$conn->error;}mysqli_stmtmysqli_prepare(mysqli$conn,string$query)9.4.6預處理操作4.綁定參數(shù)在創(chuàng)建了預處理語句之后,需要將具體的參數(shù)綁定到SQL語句模板中的占位符上,通過mysqli_stmt_bind_param()函數(shù)來實現(xiàn)的。boolmysqli_stmt_bind_param(mysqli_stmt$stmt,string$types,mixed&$var[,mixed&$...])具體參數(shù)說明如?下。$stmt:表示由mysqli_prepare()函數(shù)創(chuàng)建的預處理語句對?象。$types:由一個或者多個字符組成的字符串,指定綁定參數(shù)的類型。boolmysqli_stmt_bind_param(mysqli_stmt$stmt,string$types,mixed&$var[,mixed&$...])9.4.6預處理操作5.執(zhí)行預處理語句綁定參數(shù)后,使用mysqli_stmt_execute()函數(shù)來執(zhí)行預處理語句。不需要額外的參數(shù),它將執(zhí)行之前通過mysqli_prepare()函數(shù)準備的并且已經(jīng)通過mysqli_stmt_bind_param()函數(shù)綁定了參數(shù)的預處理語句。mysqli_stmt_execute()函數(shù)的具體語法格式如下。boolmysqli_stmt_execute(mysqli_stmt$stmt)下面是執(zhí)行預處理語句并處理執(zhí)行結果的示例代碼。if(mysqli_stmt_execute($stmt)){echo"成功創(chuàng)建";}else{echo"Error:".$stmt->error;}boolmysqli_stmt_execute(mysqli_stmt$stmt)if(mysqli_stmt_execute($stmt)){echo"成功創(chuàng)建";}else{echo"Error:".$stmt->error;}9.4.6預處理操作6.關閉預處理語句及數(shù)據(jù)庫連接操作完成后,關閉預處理語句及數(shù)據(jù)庫連?接。mysqli_stmt_close($stmt);mysqli_close($conn);通過上述步驟,可以將數(shù)據(jù)插入數(shù)據(jù)庫,同時避免了SQL注入的風險,并且由于預編譯的SQL語句可以被數(shù)據(jù)庫緩存和重用,所以也提高了性能。在實際開發(fā)中,預處理不僅可以用于INSERT語句,還可以用于SELECT、UPDATE和DELETEFROM等語句,以確保數(shù)據(jù)庫操作的安全性和效?率。mysqli_stmt_close($stmt);mysqli_close($conn);【案例實踐9-2】添加預處理實現(xiàn)學生注冊功能(1)使用mysqli_prepare()函數(shù)創(chuàng)建預處理語?句。(2)使用mysqli_stmt_bind_param()函數(shù)將用戶名和密碼綁定到預處理語句的占位符上。'ss'表示兩個參數(shù)都是字符?串。(3)執(zhí)行預處理語句并檢查執(zhí)行結果,如果成功則輸出成功信息,否則輸出錯誤信?息。(4)關閉預處理語句及數(shù)據(jù)庫連接,釋放資?源。【案例實踐9-2】添加預處理實現(xiàn)學生注冊功能【案例實踐9-2】添加預處理實現(xiàn)學生注冊功能(5)啟動phpStudy,啟用Apache和MySQL服?務。(6)啟動內置服務器,在瀏覽器中打開html文?件。(7)輸入用戶名和密碼,單擊“注冊”按鈕,提示“注冊成功”。(8)單擊編輯器界面的Database按鈕,連接數(shù)據(jù)庫student_db,打開students數(shù)據(jù)表,查看添加的數(shù)據(jù),如圖所?示。9.4.7處理結果集結果集是指從數(shù)據(jù)庫中查詢得到的數(shù)據(jù)集合。為了從這些結果集中提取數(shù)據(jù),我們需要使用特定的PHP函數(shù)。9.4.7處理結果集1.mysqli_num_rows()函數(shù)mysqli_num_rows()函數(shù)用來獲取查詢結果集中的記錄(行)數(shù)。intmysqli_num_rows(mysqli_result$result)具體參數(shù)說明如?下。$result:由mysqli_query()、mysqli_store_result()或mysqli_use_result()函數(shù)返回的結果?集。具體示例代碼如下。$result=mysqli_query($conn,"SELECT*FROMstudents");$row_count=mysqli_num_rows($result);echo"查詢結果有{$row_count}行數(shù)據(jù)。";intmysqli_num_rows(mysqli_result$result)$result=mysqli_query($conn,"SELECT*FROMstudents");$row_count=mysqli_num_rows($result);echo"查詢結果有{$row_count}行數(shù)據(jù)。";【案例實踐9-3】解決用戶名沖突問題出現(xiàn)用戶名沖突的問題,那么需要查找該用戶名對應的記錄是否多于1條,如果多于1條,則提示“該用戶名已存在,請核對后重新輸入”,否則才能執(zhí)行數(shù)據(jù)的插入操作。【案例實踐9-3】解決用戶名沖突問題如果要使用預處理,就需要使用mysqli_stmt_num_rows()函數(shù)來判斷記錄的條數(shù)。9.4.7處理結果集2.mysqli_fetch_array()函數(shù)mysqli_fetch_array()函數(shù)用于從結果集中取出一行數(shù)據(jù),可以選擇以關聯(lián)數(shù)組、索引數(shù)組或兩者兼有的形式返回。mixedmysqli_fetch_array(mysqli_result$result[,int$result_type=MYSQLI_BOTH])具體參數(shù)說明如?下。$result_type:可選參數(shù),定義返回數(shù)組的類型,可以是MYSQLI_ASSOC(關聯(lián)數(shù)組)、MYSQLI_NUM(索引數(shù)組)或MYSQLI_BOTH(同時返回關聯(lián)和索引數(shù)組,為默認值)。具體示例代碼如下。$result=mysqli_query($conn,"SELECT*FROMstudents");while($row=mysqli_fetch_array($result)){echo$row['id'].''.$row['name'].'<br>';}mixedmysqli_fetch_array(mysqli_result$result[,int$result_type=MYSQLI_BOTH])$result=mysqli_query($conn,"SELECT*FROMstudents");while($row=mysqli_fetch_array($result)){echo$row['id'].''.$row['name'].'<br>';}9.4.7處理結果集3.mysqli_fetch_assoc()函數(shù)mysqli_fetch_assoc()函數(shù)用于從結果集中取出一行數(shù)據(jù),以關聯(lián)數(shù)組的形式返回,其中數(shù)組的鍵是字段名,值是對應的數(shù)據(jù),其具體語法格式如下。associative_arraymysqli_fetch_assoc(mysqli_result$result)具體示例代碼如下。$result=mysqli_query($conn,"SELECT*FROMstudents");while($row=mysqli_fetch_assoc($result)){echo$row['id'].''.$row['name'].'<br>';}associative_arraymysqli_fetch_assoc(mysqli_result$result)$result=mysqli_query($conn,"SELECT*FROMstudents");while($row=mysqli_fetch_assoc($result)){echo$row['id'].''.$row['name'].'<br>';}9.4.7處理結果集4.mysqli_fetch_row()函數(shù)mysqli_fetch_row()函數(shù)用于從結果集中取出一行并保存在索引數(shù)組中arraymysqli_fetch_row(mysqli_result$result)具體示例代碼如下。$result=mysqli_query($conn,"SELECT*FROMstudents");while($row=mysqli_fetch_row($result)){echo$row[0].''.$row[1].'<br>';//假設第一列是ID,第二列是名字

}arraymysqli_fetch_row(mysqli_result$result)$result=mysqli_query($conn,"SELECT*FROMstudents");while($row=mysqli_fetch_row($result)){echo$row[0].''.$row[1].'<br>';//假設第一列是ID,第二列是名字

}【案例實踐9-4】實現(xiàn)學生登錄功能(1)設計一個前端頁面,用于收集學生輸入的用戶名和密碼?!景咐龑嵺`9-4】實現(xiàn)學生登錄功能(2)建立與MySQL數(shù)據(jù)庫的連接。檢查用戶是否已提交登錄表單。查找數(shù)據(jù)庫中是否存在輸入的用戶名,如果不存在這樣的用戶名,則提示用戶名不正確;如果存在,則驗證密碼是否正確?!景咐龑嵺`9-4】實現(xiàn)學生登錄功能(4)啟動phpStudy,啟用Apache和MySQL服?務。(5)啟動內置服務器,在瀏覽器中打開html文件,結果如圖所?示。(6)輸入用戶名和密碼,單擊“登錄”按鈕,提示“密碼不正確,請核對后重新輸入”。(7)單擊“確定”按鈕,返回登錄頁面,重新輸入密碼,提示“密碼正確,登錄成功!”。9.4.8釋放結果集在處理完結果集后,考慮資源管理和性能,應該釋放結果集所占用的內存。盡管PHP腳本結束時會自動清理資源,但推薦在不需要結果集時手動釋放它。mysqli_free_result($result);mysqli_free_result($result);9.4.9斷開數(shù)據(jù)庫連接完成所有數(shù)據(jù)庫操作后,應該斷開與數(shù)據(jù)庫的連接,以釋放資源并避免不必要的連接占用。使用mysqli_close()函數(shù)可以斷開數(shù)據(jù)庫連接。mysqli_close($conn);這里$conn是之前通過mysqli_connect()函數(shù)或類似的函數(shù)建立的數(shù)據(jù)庫連?接。mysqli_close($conn);在Web開發(fā)過程中,數(shù)據(jù)的安全性是至關重要的。當使用PHP操作MySQL數(shù)據(jù)庫時,我們需要時刻保持對數(shù)據(jù)安全的警覺性。以下是一些建議,幫助培養(yǎng)和加強數(shù)據(jù)安全意?識。(1)了解安全風險。(2)編寫安全的SQL語句。(3)保護敏感數(shù)據(jù)。(4)定期備份數(shù)據(jù)。只有確保數(shù)據(jù)的安全性,應用才能贏得用戶的信?任。數(shù)據(jù)安全意識的培養(yǎng)與加強本項目的主要目標是幫助學生更深入地理解PHP在實際Web開發(fā)中的應用,并掌握如何操作MySQL數(shù)據(jù)庫。通過構建一個功能完善的學生信息管理系統(tǒng),我們將學習從數(shù)據(jù)庫設計、后端邏輯編寫到前端界面展示的完整開發(fā)流程,學會如何利用PHP連接和操作MySQL數(shù)據(jù)庫,實現(xiàn)對學生信息的增刪改查等基本功?能。任務9-1設計數(shù)據(jù)庫確立學生信息的數(shù)據(jù)結構,包括學生的基本信息等。設計兩張表:用戶表(user,如表所示)和學生信息表(stu_info,如表所示)。用戶表包含用戶名、密碼以及用戶等級(標注是管理員還是普通用戶)學生信息表則將包括學號、姓名、班級和手機號等關鍵信息。、任務9-2設計數(shù)據(jù)連接設計統(tǒng)一的數(shù)據(jù)庫連接腳本conn.php。任務9-3設計登錄頁面(1)登錄頁面,用戶被提示需輸入用戶名和密碼以進行身份驗證。系統(tǒng)通過查詢數(shù)據(jù)庫來驗證用戶輸入的信息:如果用戶名或密碼為空,系統(tǒng)將給出提示;如果用戶名不存在或密碼不正確,用戶也將收到相應的錯誤提示。login.php頁面的關鍵腳本如下。任務9-3設計登錄頁面(2)啟動phpStudy,啟用Apache和MySQL服?務。(3)啟動內置服務器,在瀏覽器中打開login.php文件,運行結果如圖所?示。任務9-4設置操作權限為區(qū)分不同用戶身份并提供相應的頁面操作權限,設計兩種不同的頭文件:header_admin.php和header_stu.php。這兩種頭文件根據(jù)用戶的身份來顯示不同的頁面鏈接,從而確保用戶只能訪問到其權限范圍內的頁?面。(1)管理員擁有系統(tǒng)最高權限,具有添加、瀏覽、編輯和查詢學生信息等能力。管理員登錄后,將看到以下鏈接選項。任務9-4設置操作權限(2)在圖所示頁面中輸入管理員的用戶名和密碼,單擊“登錄”按鈕,結果如圖所?示。(3)普通用戶只有瀏覽學生信息和查詢學生信息的權限。普通用戶登錄后,將看到以下鏈接選項。任務9-4設置操作權限(4)在圖所示頁面中輸入普通用戶的用戶名和密碼,單擊“登錄”按鈕,結果如圖所?示。任務9-5設計注冊頁面設計注冊頁面,實現(xiàn)管理員和普通用戶的注冊功能,通

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論